Unity入門 - Rigidbody、物理特性を制御しよう-
初めに
オブジェクトに重力などの力を加え、自然に動かすときに、Rigidbodyが使われます。本記事では、簡単なRigidbodyの使い方を解説します。
Index
オブジェクトにRigidbodyを付ける方法
今回はSphere(球体)にRigidbodyを付けてみます。
1. ヒエラルキーで右クリックし、3D Object→Sphereをクリック
2. Sphereを選択し、インスペクターのAdd Componentをクリック
3. Rigidbodyをアタッチする
(Physics→Rigidbody もしくは rigidbodyと打ち検索をかける)
これでRigidbodyを付けることができました。
実行してみる
実行してみると、次のように重力が働いていることが分かります。
下にCubeを置いて、実行してみると次のようになります。
SphereのRigidbodyが機能して、衝突したら止まってくれるようになっています。
Rigidbodyのパラメータ
Rigidbodyには上の画像のようなパラメータがあります。
プロパティ | 機能 |
---|---|
Mass | 物体の質量 (Kg 単位) |
Drag | 力によって動く際に、オブジェクトに影響する空気抵抗の大きさ |
Angular Drag | 回転する際に、オブジェクトに影響する空気抵抗の大きさ |
Use Gravity | 有効にすると、オブジェクトは重力の影響を受けます |
Is Kinematic | 有効にすると、オブジェクトは物理エンジンによって駆動されず、その Transform によってのみ操作されます |
Interpolate | 物理演算の処理の精度 |
Collision Detection | 壁の貫通を防ぐ処理 |
Constraints | リジッドボディの動きに関する制限 |
- Freeze Position | X, Y, Z軸ごとに座標に関して、Rigidbodyの影響をうけないようにできる |
- Freeze Rotation | X, Y, Z軸ごとに回転に関して、Rigidbodyの影響をうけないようにできる |
AddForce、オブジェクトに力を加える
AddForceを用い、オブジェクトに力を加えて動かしてみましょう。
次のスクリプトをSphereにアタッチしてみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereScript : MonoBehaviour { // Start is called before the first frame update void Start() { //Rigidbodyの取得 Rigidbody rb = this.GetComponent<Rigidbody>(); //加える力を3次元ベクトルで設定 Vector3 force = new Vector3(5.0f, 0.0f, 0.0f); //AddForceを用いて、力を加える //Rigidbody.AddForce(ベクトル, オプション) rb.AddForce(force, ForceMode.Impulse); } }
forceでx軸方向に力を加えているため、Sphereは動画のように動きました。
Addforceの引数
AddForceは上記のように、引数にベクトルとオプションを持ちます。第2引数であるオプションの部分で指定できるものは次の通りとなります。
コード | 機能 |
---|---|
ForceMode.Force | 質量を使用してRigidbodyに継続的に力を加える |
ForceMode.Impulse | 質量を使用してRigidbodyに即時に力を加える |
ForceMode.Acceleration | 質量を無視してRigidbodyに継続的に加速を加える |
ForceMode.VelocityChange | 質量を無視してRigidbodyに即時に速度変化を加える |
先ほどは実行開始時に一回だけ力を加えるために、ForceMode.Impulseを指定しました。適切に使い分けましょう。
Physic Materialについて
Rigidbodyで物理を制御する際、Physic Material(物理特性マテリアル)を使うことがあります。Physic Materialでは衝突するオブジェクトの摩擦や反発係数を調整することができます。
Physic Materialの作り方
Assets内で右クリック→Create→Physic Materialで作ることができます。
Physic Materialの内容
Dynamic Friction | 動摩擦係数 |
---|---|
Static Friction | 静止摩擦係数 |
Bounciness | 反発係数 |
Friction Combine | 衝突するオブジェクト間の摩擦の処理方法 |
上の三つは0~1までで表されます。例えば、Boundnessを0にすると、まったく跳ね返らなくなり、1にするとよく跳ねるようになります。
アタッチの仕方
画像のようにアタッチします。
RigidbodyとRigidbody2dについて
Rigidbodyには、RigidbodyとRigidbody2dがあります。
Rigidbodyは3次元に関して作用しますが、Rigidbody2dは平面にしか作用しません。3dのオブジェクトにはRigidbodyを、2dゲームを作りたい場合はRigidbody2dを付けておけばよいでしょう。
最後に
Rigidbodyの使い方について、まとめました。当たり判定を取得する際にも使うため、頻繁に使います。わかりにくい部分があるかもしれませんが、使えるようになっておきましょう。