【Unity】Rigidbody2DのBody Typeについて【2D】

内容

Rigidbody2DのBody Typeについての説明

BodyTypeとは

そもそもBodyTypeとは何かというと、簡単に言えばRigidbody2Dの状態のことです。
BodyTypeはInspectorから変更することができます。
種類は3種類あり、
Dynamic (動的),
Kinematic (キネマティック),
Static (静的)
の三つあります。

Dynamic

モードがDynamicの時はオブジェクトに物理演算が適応されます。
Rigidbodyを適応した最初の状態ですね。

スクリプトでDynamicにする

Dynamicにするには
Rigidbody2D.bodyType = RigidbodyType2D.Dynamic;

下記、サンプルコード。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    void Start()
    {
        //Rigidbody2Dを取得
        var rb = GetComponent<Rigidbody2D>();
 
        //Dynamicにする
        rb.bodyType = RigidbodyType2D.Dynamic;
    }
}

Dynamicの挙動

Dynamicは普通に物理現象が適応されますので、重力によって落下していきます。

Kinematic

kinematicモードは重力や力が適応されません。
kinematicモードを動かしたい場合、スクリプトで位置を指定することで移動させます。

下記、サンプルコード。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    void Start()
    {
        //Rigidbody2Dを取得
        var rb = GetComponent<Rigidbody2D>();
 
        //kinematicにする
        rb.bodyType = RigidbodyType2D.Kinematic;
    }
}

Kinematicの挙動(重力)

Kinematicでは重力が適応されません。
ですのでオブジェクトに重力が適応されないので、起動時は宙に浮かんだままです。

kinematicの挙動(力)

また、外的な力が加わってもピクリともしません。
(上から物が落ちてきても不動)
下記、移動させるスクリプトを適応させて力を加えてを動きません。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    //変数を作る
    Rigidbody2D rb;
 
    void Start()
    {
        //Rigidbody2Dを取得
        rb = GetComponent<Rigidbody2D>();
 
        //加える力
        Vector2 force = new Vector2(1000, 0);
 
        //Rigidbody2Dに力を加える
        rb.AddForce(force);
    }

kinematicの移動

kinematicモードのオブジェクトを移動させるにはMovePosition関数を使います。
使い方は、

rigidbody2D.MovePosition(vector2型の変数)

下記、サンプルコード。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    //変数を作る
    Rigidbody2D rb;
    Vector2 pos;
 
    void Start()
    {
        //Rigidbody2Dを取得
        rb = GetComponent<Rigidbody2D>();
 
        //移動場所
        pos = new Vector2(5, 0);
 
        //移動させる
        rb.MovePosition(pos);
    }
}

kinematicの回転

kinematicモードのオブジェクトを回転させるにはMovePosition関数を使います。
使い方は、

rigidbody2D.MoveRotation(float型);

下記、サンプルコード。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    //変数を作る
    Rigidbody2D rb;
 
    void Start()
    {
        //Rigidbody2Dを取得
        rb = GetComponent<Rigidbody2D>();
 
        //45度回転させる
        rb.MoveRotation(45.0f);
    }
}

Static

Staticは全く動くことがないオブジェクトです。
これだけだとkinematicと同じように感じるかと思いますが違いはもちろんあります
主な違いとしては、
1.移動や回転ができない
2.処理が軽い

スクリプトでStaticにする

Staticにするには
Rigidbody2D.bodyType = RigidbodyType2D.Static;

下記、サンプルコード。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    void Start()
    {
        //Rigidbody2Dを取得
        var rb = GetComponent<Rigidbody2D>();
 
        //Staticにする
        rb.bodyType = RigidbodyType2D.Static;
    }
}

移動や回転ができない

kinematicはMovePositionやMoveRotation関数を使えばスクリプトで移動や回転をすることができました。
しかし、StaticではMovePositionやMoveRotation関数を使うことができません

参考サイト


この記事が気に入ったらサポートをしてみませんか?