【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関数を使うことができません。
参考サイト
この記事が気に入ったらサポートをしてみませんか?