Rigidbody2DのBodyTypeの違いを見てみる|Unityメモ

今回はUnityで物理動作を行うRigidBody2Dの「BodyType」の違いを確認していきます。

はじめに

まずは「2DObject」→「Sprites」→「Circle」を追加します。

「Add Component」から「Rigidbody2D」を追加します。

RigidBodyのBodyType

RigidBody2Dの1番上にあるBodyTypeの項目には、「Dynamic(動的)」、「Kinematic」、「Static(静的)」の3種類があります。

ボディタイプを変更すると、設定できる項目が変わります。

具体的な違い

実際にどう違うのかを具体的に見ていきます。

Dynamic(動的)

初期値のDynamicの状態で動かしてみると、下に落ちていきます。

Dynamic(動的)は、質量、重力スケールが初期値で設定されているので、その影響で下に落ちています。Dynamicは、一般的なボディタイプなのでデフォルトでセットされます。設定項目(プロパティ)も多いため、3種類の中で一番パフォーマンスに高い負荷がかかります。

次に、スクリプトを追加して、ボールに力を加えてみます。まずは、下に落ちないように重力スケールを0にします。

Movingと言う名前でスクリプトを追加します。

スクリプトの中身は下記に変更します。

using UnityEngine;

public class Moving : MonoBehaviour
{
    private Vector2 _move;
    private float _force = 3.0f;
    private Rigidbody2D _rb;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        _move = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        _rb.AddForce(_move * _force);
    }
}

実行してキー入力すると下記のような感じにボールに力が加わります。

Kinematic

ボディタイプをキネマティックに変更するとプロパティが減り、重力と力の影響をうけなくなります。

この場合、物体を動かす方法としては「速度(力の影響受けない)」か「再配置」です。下記が速度で動かす場合のスクリプト例です。

using UnityEngine;

public class Moving : MonoBehaviour
{
    private Rigidbody2D _rb;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
        _rb.velocity = new Vector2(1, 0);
    }
}

質量に関係するプロパティがないため、無限に大きな質量があるかのように動作します。プロパティが減るため、dynamicよりもシステムリソースに負荷をかけないです。

Static(静的)

全く動かないのがStaticです。

ためしに、動かそうとするとエラーが出ます。

特徴としては、全く動かない、もっともリソースに負荷がかからない。と言った感じです。

タイトルとURLをコピーしました