Rigidbody'siz Atış Yapmak

Rigidbody'siz Atış Yapmak
Merhaba arkadaşlar,

Rigidbody'e velocity vermeden Update fonksiyonu içinde position tanımlayarak atış formülü oluşturdum.

Atış süresi ve max. yükseliği söyleyerek atışı kendisi yapıyor, variable'larımız bunlar.
throwDuration = Atış Süresi
throwMaxY = max. Yükselik​
throwK;
gecenZaman;

Bu formül ile K sabitini daha sonra kullanmak üzere hesaplıyoruz.
throwK  = (throwDuration /2)*(throwDuration / 2)/throwMaxY;​

Ve Update fonskiyonu içerisinde geçen zamanı vererek anlık yükseklik değerini alabiliyoruz
gecenZaman += Time.deltaTime;
float yPos = gecenZaman * (throwDuration - gecenZaman) / throwK;​

Ve tekrar Update içerisinde yüksekliği belirliyoruz, X ve Z'yide belki anlaşılmıştır ilk ve son konum arasında Linear Interpolation alarak belirliyoruz.

transform.position = new Vector3( Mathf.Lerp(firstLoc.x , targetLoc.x , gecenZaman / throwDuration), yPos, Mathf.Lerp(firstLoc.z , targetLoc.z , gecenZaman / throwDuration) );


Herkese kolay gelsin :)

Yorumlar
Onur İğdi
Onur İğdi Vector3 firstLoc start methodunda transformun positionu Vector3 targetLoc içinde nesnenin varmasını istediğiniz kordinatı (ben bir public transform gösterip startta onun positionu nu aldım) olarak tamamlarsanız harika çalışıyor.
Onur İğdi
Onur İğdi https://www.toygel.org/Oyun/Detay/52/Rotary-Sky-Golf bende bu oyunda fizik motorundan hoşnut kalmadığım için parabol hesaplayarak yapmıştım ama bu kadar basit çözmemiştim boşu boşuna daha zorlaştırmışım olayı :)
Ilker Aybey
Ilker Aybey
Son paylaşımları