Unity: n秒後のRigidbodyの移動先の位置を取得するスクリプト書いた
Unityでゲームを作っていると、
- 「このボールの落下位置を知りたい」
- 「この矢の軌跡を計算したい」
という感じで、n秒後のRigidbodyの移動先を知りたい というケースが結構あると思う。
自分も同じケースに遭遇したので、n秒後のRigidbodyの移動先の位置を取得するスクリプトを書きました。
TrajectoryCalculate.cs
Unityプロジェクトに.csを入れるだけで使えます。
できることとしては、
- 力が加えられた剛体(Rigidbody.AddForce)のn秒後の移動先を取得する
- 剛体の現在の速度(.velocity)を元にn秒後の移動先を取得する
- 2D、3Dどちらも使用可能
というものです。
Calculate Trajectory Functions.
使い方
力で計算
var force = new Vector3(300f, 300f, 0f); var time = 3; // 3 secods after. TrajectoryCalculate.Force(transform.position, force, rigidbody.mass, Physics.gravity, 1, time);
速度で計算
TrajectoryCalculate.Velocity(transform.position, rigidbody2d.velocity, Physics.gravity, rigidbody2D.gravityScale, time);
使用例
白い球の2秒間の起動を0.2秒ずつ計算して移動先に赤い球を配置する(画面外にも赤い玉があります)
物理とか数学が超苦手なので、しんどかった orz