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.
Bu formül ile K sabitini daha sonra kullanmak üzere hesaplıyoruz.
Ve Update fonskiyonu içerisinde geçen zamanı vererek anlık yükseklik değerini alabiliyoruz
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
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
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ı :)
Son paylaşımları