Unityで速度(時速、分速、秒速)の測り方
2022年7月4日
2023年1月10日

Unityの世界では1unitが1m

時速を測るにはUnityの中の距離の基準を知っておかないと思い調べてみた所、1unitの1辺の長さが1mが基準となっています。
結論から言えばRigidbodyのvelocity.magnitudeで秒速(メートル毎秒)を得る事ができますので3.6fを掛ける事で時速を得る事が可能です。
時速、秒速、分速をUnityのインスペクターで表示する
とりあえずサクっとスピードを測りたい時のスクリプトです。ターゲットに測りたい対象をアタッチすれば確認可能です。

Rigidbody.velocity.magnitudeはfloat型ですが見やすさの為にintにキャストしてます。
public class lookSpeed : MonoBehaviour
{
public GameObject target;
Rigidbody rb;
[SerializeField] int kph;
[SerializeField] int kph_fwd;
[SerializeField] int kph_up;
[SerializeField] int kph_right;
[SerializeField] int mps;
[SerializeField] int mpm;
void Start()
{
rb = target.GetComponent<Rigidbody>();
}
void Update()
{
//進行方向基準(時速 km/h) 進んでる方向での速度になる
kph = (int)(rb.velocity.magnitude * 3.6f);
//前方向基準 後ろ方向はマイナスになる
kph_fwd = (int)(Vector3.Dot(rb.velocity, transform.forward) * 3.6f);
//上方向基準 下方向はマイナスになる
kph_up = (int)(Vector3.Dot(rb.velocity, transform.up) * 3.6f);
// 右方向基準 左方向はマイナスになる
kph_right = (int)(Vector3.Dot(rb.velocity, transform.right) * 3.6f);
//秒速(m/s メートル毎秒)
mps = (int)rb.velocity.magnitude;
//分速(m/m メートル毎分)
mpm = (int)rb.velocity.magnitude * 60;
}
}
Vector3.Dot関数は内積を求めるものです。これで特定方向の速度が測れます。
例えば transform.up なら上方向に進んでいる速度はプラス表示(ジャンプの速度等) 落下速度はマイナスで表示されます。
前基準(transform.forward)と右基準(transform.right)も同様に反対側はマイナスで表示されます。