Unityでゲームをつくろう【#2 RigidBodyで物理演算をしてみる】

こんにちは。第二開発部のT.Nです。
今年kentemに新卒で入社したUnity初心者が、同じUnity初心者へ向けて解説する記事、第二回目です。
前回はGameObjectをスクリプトから動かしました。

前回:Unityでゲームをつくろう【#1 スクリプトからGameObjectを動かしてみる】 - KENTEM TechBlog

今回はRigidbodyというコンポーネントを使って、簡単な物理演算をしていきます。 (前回、「第二回ではキーボードから入力を受け取る」という宣言をしていましたが変更しました。申し訳ございません、、、)

GameObjectを入れる

まずは何もしていない状態を確認していきます。
今回はSphereとPlaneを入れ、SphereをPlaneより上に配置します。
これで実行してみます。
するとSphereは空中で止まったままとなりました。

これを重力の影響を受けるようにしてみます。

Rigidbodyコンポーネントを追加する

重力の影響を受けさせるには、新たにRigidbodyというコンポーネントを追加しなければいけません。
以下コンポーネントを追加する手順です。

  • InspectorのAddComponentをクリック
  • 入れたいコンポーネントの名前を検索

今回はSphereにRigidbodyと検索して入れます。

これで実行してみます。
するとSphereが落下し、Planeに衝突して止まりました。

これはRigidbodyのUseGravityという項目がOnになっており、Sphereが重力の影響を受けるようになったためです。

Rigidbodyとは

このRigidbodyとは、GameObjectに物理挙動をつけるためのコンポーネントです。
重力や空気抵抗など、オブジェクトに力を与えたりできます。

初期速度を与える

それでは実際にRigidbodyの値を変えて、Sphereに初期速度を与えてみましょう。
Rigidbodyの中にVelocity(Rigidbody→Info→Velocity)という値があります。
これは物体のx, y, z方向の速度です。
Object(Sphere)を落としてみるとyの値が増えて(落下なのでマイナス方向)、地面に当たって止まると0になるのがわかります。

この値をStart()で変えて初期速度を与え、Sphereを飛ばしてみましょう。
初期速度を与えるコードのスクリプトを作成し、Sphereにアタッチして下さい。

以下コード例です。

using UnityEngine;

public class Sphere : MonoBehaviour
{
    private Rigidbody _rigidBody;

    private void Start()
    {
        _rigidBody = GetComponent<Rigidbody>();

        _rigidBody.velocity = new Vector3(15, 0, 0);
    }
}

今回はRigidbodyコンポーネントの中のVelocityの値を変えたいので、GetComponentでRigidbodyを取得します。
その後、velocityに初期速度のVector3を与えます。(今回はx方向に15)
では実行してみます。

するとSphereが飛んでいきました。
このようにしてGameObjectに初期速度を与えることができます。

空気抵抗を与える

先ほどのVelocityの値を観察すると、地面に当たるまでVelocityのx値が全く変化がないことがわかります。

実際は空気抵抗などで少しずつ速度は落ちていくものです。
ではその空気抵抗をつけてみましょう。

空気抵抗はDragという項目で設定します。
デフォルトは0で、空気抵抗が全くない状態です。この値を増やしていくと抵抗が強くなっていきます。
今回は1にしてみます。

すると先ほどとは異なり空中で速度が落ちていきました。

おわりに

いかがだったでしょうか。
私はRigidbodyのような物理演算系のコンポーネントは、使用した経験がないので、作っていて楽しかったです。

次回は、UIを使ってみたいと思います。(また変更したらすみません)


KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。

hrmos.co