はとの豆知識

Unityを中心に手っ取り早い機能の実装を紹介します。

【Unity】簡単に物理演算を行ってくれる 「rigidbody」の紹介

プレイヤー、オブジェクトを重力に従って自然に落下させたい。
レースゲームなどで車のアクセルを踏んで徐々に加速させたい。
力を加えられ飛んでいくサッカーボールのような表現がしたい。
そんな感じの自然な表現が簡単にできてしまうrigidbodyの機能を説明していきます。

手っ取り早い実装方法

オブジェクトにrigidbodyを付けてみる

f:id:HatoHatter:20210416012940p:plain
f:id:HatoHatter:20210416015438p:plain
f:id:HatoHatter:20210416015451p:plain
f:id:HatoHatter:20210416015705p:plain

AddForceで力を加えて移動させる

質量を考慮して継続的に力を加えます。
f:id:HatoHatter:20210425003206g:plain

    Rigidbody rb;
    private readonly int power = 5;

    void Start()
    {
        //自分に付いているrigidbodyを取得
        this.rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        this.rb.AddForce(Vector3.forward * this.power, ForceMode.Force);
    }

Accelerationで継続的に力を加える

質量を無視して継続的に力を加えます。
f:id:HatoHatter:20210425003703g:plain

    void Update()
    {
        this.rb.AddForce(Vector3.forward * this.power, ForceMode.Acceleration);
    }

Impulseで瞬間的に力を加える

質量を考慮して瞬間的に力を加えます。
f:id:HatoHatter:20210425004927g:plain

    Rigidbody rb;
    private readonly int power = 20;

    void Start()
    {
        //自分に付いているrigidbodyを取得
        this.rb = GetComponent<Rigidbody>();
        //こっちはstartに記述
        this.rb.AddForce(Vector3.forward * this.power, ForceMode.Impulse);
    }

VelocityChangeで瞬間的に力を加える

質量を無視して瞬間的に力を加えます。
f:id:HatoHatter:20210425005439g:plain

    void Start()
    {
        //自分に付いているrigidbodyを取得
        this.rb = GetComponent<Rigidbody>();
        //こっちはstartに記述
        this.rb.AddForce(Vector3.forward * this.power, ForceMode.VelocityChange);
    }

詳しい解説

上の例では質量考慮無視の挙動に大差はありませんが
RigidbodyコンポーネントMass(質量)の数値を大きくすると大きく違いが現れます。

transform.forwardとVector3.forwardによる挙動の違い

もしVector3.forwardtransform.forwardに変えた場合

        this.rb.AddForce(transform.forward * this.power, ForceMode.Force);

f:id:HatoHatter:20210425005855g:plain
前に進まずその場でうろうろしていますね。

ざっくり説明すると
Vector3.forwardはどんな時でも世界から見てこっちが前といった感じに決まっていて
その方向に力が働くようになっています。
一方transform.forwardでは自分から見てこっちが前といった感じになります。

なので 前に進む➜ボールが回転する➜
回転することで自分から見て前方向が変わる➜前に進む
を繰り返しているようになります。
どちらも適した場面が出てくると思うので必要に応じて使い分けましょう。

まとめ

Rigidbodyはかなり強力なコンポーネントです。
当たり判定など扱う際にも必要になってくるのでぜひ活用しましょう。
今回は説明していませんが
Mass(質量)やUse Gravity(重力を適用するか)などのパラメーターが存在するので
色々実験しながら覚えていきましょう。