今回はRigidBody2Dの「BodyType」の違いのメモです。
RigidBodyのBodyType
RigidBody2Dコンポーネントの1番上にあるBodyTypeの項目には、「Dynamic(動的)」、「Kinematic」、「Static(静的)」の3種類があります。

ボディタイプを変更すると、設定できるコンポーネントが変わります。
具体的な違い
実際にどう違うのかを具体的に見ていきます。
まずは「2Dオブジェクト」→「スプライト」→「円」を追加。

Rigidbody2Dをアタッチします。

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

Dynamic(動的)では、質量、重力スケールが初期値で設定されているので、その影響で下に落ちています。
Dynamicは移動する物体として、一般的なボディタイプなのでデフォルトです。プロパティも多いため、3種類の中で一番パフォーマンスに高い負荷がかかります。
Movingと言う名前でスクリプトをアタッチ。

下に落ちないように重力スケールを0にします。

スクリプトの中身を下記にして、力を加えてみます。
using System.Collections; using System.Collections.Generic; 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); } }
キー入力でボールに力が加わったような自然な動きをします。
キネマティック
ボディタイプをキネマティックに変更するとプロパティが減り、重力と力の影響をうけなくなります。

この場合の物体を動かす方法は「速度(力の影響受けない)」か「再配置」。
下記が速度で動かす場合のスクリプト例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Moving : MonoBehaviour { private Rigidbody2D _rb; void Start() { _rb = GetComponent<Rigidbody2D>(); Vector2 v = new Vector2(1, 0); _rb.velocity = v; } }
下記が再配置(ポジション移動)の例。
Invoke(再帰)で少しづつ動かしています。一気に移動する場合、いきなりMovePositionの指定でOK。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Moving : MonoBehaviour { private Rigidbody2D _rb; private Vector2 _pos; private float _Xpos; void Start() { _rb = GetComponent<Rigidbody2D>(); movePosition(); } private void movePosition() { if (_Xpos <= 8.0) { _Xpos += 0.02f; _pos = new Vector2(_Xpos, 0); _rb.MovePosition(_pos); Invoke("movePosition", 0.01f); } } }
質量に関係するプロパティがないため、無限に大きな質量があるかのように動作します。
プロパティが減るため、dynamicよりもシステムリソースに負荷をかけないです。
Static(静的)
全く動かないのがStaticです。

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

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