ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity入門 - Rigidbody、物理特性を制御しよう-

初めに

 オブジェクトに重力などの力を加え、自然に動かすときに、Rigidbodyが使われます。本記事では、簡単なRigidbodyの使い方を解説します。


オブジェクトに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の使い方について、まとめました。当たり判定を取得する際にも使うため、頻繁に使います。わかりにくい部分があるかもしれませんが、使えるようになっておきましょう。

(参照)
docs.unity3d.com
docs.unity3d.com