Unity: n秒後のRigidbodyの移動先の位置を取得するスクリプト書いた

f:id:takashicompany:20150306194457g:plain

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);

使用例

f:id:takashicompany:20150306195913g:plain
白い球の2秒間の起動を0.2秒ずつ計算して移動先に赤い球を配置する(画面外にも赤い玉があります)

物理とか数学が超苦手なので、しんどかった orz