Konumuza gelecek olursa konuyu daha iyi anlamak için Rotate fonksiyonundan bahsedeceğim.Bildiğiniz gibi rotate fonksiyonu bir objenin istediğimiz bir yönde dönmesini sağlıyor.Şöyle bir senaryo düşünelim.Bir küpümüz var bu küpü ok yönü ile sağa sola aşağı yukarı şekilde 90 derece döndürüyoruz.
Koda olarak göstermek gerekirse örneğin sağ yön tuşuna bastığımızda şu kodla döndereceğiz.
Diğer yönleride böyle küpün ne tarafa dönmesi göre yaptığımızı düşünelim.Oyunu çalıştırdığımızda döndermeye başladağımızda bir sorun olduğunu farkedeceksiniz.Bir sağa bir aşağı yön tuşuna bastığınızda aşağı deği yana doğru doksan derece döndüğünü göreceksiniz işte bunun sebebi dönme hareketinin locale göre olması yani dönme merkezi olarak küpü alıyor.Bu yüzden bunu worlde göre yapmamız gerekiyor.Onu bu Rotate de yapmak rotate fonksiyonuna Space.World ekliyoruz.
Şimdi geldik asıl konumuza yine bir örnek üzerinden ilerileyelim. Benim yapmakta olduğum bir proje var. Bu projede bir zarımız var ve yön tuşlarıyla sağa sola aşağı yukarı birer birim ilerleterek 90 derece dönderek ilerletiyorum.Bunun da doğal bir görüntü olması için Vector3.MoveTowards ve Quaternion.RotateTowards kullanıyorum.
Direk kullanıldığımızda Rotate fonksiyonundaki sorunu yaşıyorum.Ama bunda direk Space.World ile dönmeyi world yapamıyoruz.Bunun yerine Quaternion.AngleAxis ile kendi rotatinumuzun çarpımı ile yapıyoruz.şimidi dönme için kodaları yapalım.
- İlk önce Quaternionları tanımlayalım.
- Daha sonra update fonksiyonu içinde RotateTowards ile döndürmeyi ayarlayalım.
- En son olarakta yön tuşları ile AngleAxis ve konumları alalım.
Paylaşım İçin Teşekkürler.
YanıtlaSil