Unityで進行方向へ力を加えることでオブジェクトを移動させる方法/Rigidbody.AddForceの使い方

billiards IT

Rigidbody.AddForceRigidbody.Velocityと似ていますが、Velocityが速度を直接変更するのに対し、AddForceでは力を加えて結果として速度や位置などを変更します。どちらも物理演算処理であることには変わりありません。

スポンサーリンク

Rigidbody.AddForceの使い方

物理演算でオブジェクトに力を加える(2D)
オブジェクト.GetComponent<Rigidbody2D>().AddForce(new Vector2(x, y), ForceMode2D.Impulse);
jump1
ステージを作ってみました。
jp1
とりあえずこれで動くようになりましたが、落ちるスピードが遅いので、
jp2
リジッドボディの重力スケールを変更し、スピード感を調節していきます。
ジャンプはVelocityで制御していますが、色々読むとAddForceでジャンプさせている例が多いので、
jp3
そのようにしてみます。どちらを使うかはケースバイケースのようで、一概にジャンプがAddForceというわけでもないようですが……。
this.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 100), ForceMode2D.Impulse);と書き換えてみます。AddForceの後の二つ目の数字が加える力の大きさになります。
//Unity C#
    void FixedUpdate()
    {

            //初期化
            this.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                this.GetComponent<Rigidbody2D>().velocity = new Vector2(-100, 0);
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                this.GetComponent<Rigidbody2D>().velocity = new Vector2(100, 0);
            }
            //上
            if (Input.GetKey(KeyCode.UpArrow))
            {
                this.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 100), ForceMode2D.Impulse);
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                this.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -100);
            }
    }

完成品はこちら

やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント