Unityで速度(時速、分速、秒速)の測り方

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)も同様に反対側はマイナスで表示されます。

Hina
  • Hina
  • ゲームにまつわる個人のブログです。
    インディゲーム開発者未満の雑草です。
    このブログはゲームに関連する事で私が書きたくなった事なら何でも書く方向性ですがUnity関係が多くなりそうです。当サイトはリンクフリーです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です