【Unity】物理演算で物体を衝突させよう!初心者向けRigidbodyの使い方

はじめに

野球やサッカーなどのスポーツゲームや、レースゲームには、現実のようにリアルに物体が動くようにゲームを作る必要があります。重力や空気との摩擦など、物理学の知識を使って計算して、ゲームに応用していく・・・とても難しいですよね。

ご安心ください。Unityには、物理演算機能が搭載されており、物体の動きや力学的な挙動を計算してくれます。これにより、オブジェクトの運動や重力などを誰でも簡単に再現することができます。

コンポーネントをつけて設定するだけで重力が再現できるよ!

本記事では、オブジェクトの移動、衝突、停止、重力の設定など基本的な動作を実装する方法について解説します!

Unityでの基本的な物理演算

Rigidbodyコンポーネントの使い方

Rigidbodyは、Unityエンジンで3D物理シミュレーションを扱う際に使用される重要なコンポーネントの1つです。Rigidbodyを使用することで、物理的な振る舞いを持つオブジェクトを作成することができます。

Hierarchy > 3D Object > Cubeを作成して、インスペクターからRigidbodyコンポーネントをアタッチします。

ゲームを再生すると、キューブが落下するようになります。

Rigidbodyの各種設定

Rigidbodyの中身について解説します。

  • Mass: オブジェクトの重さを設定します。
  • Drag: オブジェクトが空気抵抗を受ける度合いを設定します。値を大きくすると、空気抵抗の影響を強く受け、落下がゆっくりになります。
  • Angular Drag: オブジェクトが回転する際に受ける空気抵抗を設定します。
  • Use Gravity: 重力を使用するかどうかを設定します。このチェックを外すと重力がなくなり、落下しなくなります。
  • Is Kinematic: チェックを入れると、オブジェクトが物理演算によって動かないようになります。物理演算を使った動きはつけたくないけど、衝突したかどうかの検出がしたい時にチェックを入れます。

Rigidbodyの注意点

Rigidbodyを使用することで、現実の物理法則に従ったリアルな動きを持つオブジェクトを作成することができます。ただし、物理演算は重い処理であるため、大量のオブジェクトを扱う場合にはパフォーマンスに注意する必要があります。

Rigidbodyをつけるのは必要最低限にしよう!

物体を衝突させよう

Hierarchy > 3D Object > Planeを作成して、キューブの下に床を配置します。床は見やすくするため、赤いマテリアルを設定しました。

ゲームを開始すると、キューブは落ちて赤い床に止まりました。

Colliderコンポーネントについて

衝突をするには、Rigidbodyに「Collider」コンポーネントも追加する必要があります。

先ほど、Hierarchy > 3D Object > Planeから作成した床は、もともと「Mesh Collider」がついていたため、衝突することができていました。Colliderがついていなければ、キューブは床を突き抜けて落下してしまいます。

Colliderの種類

Colliderコンポーネントは、複数の種類があります。立方体ならBox Collider、球体ならSphere Colliderなど、好みの衝突の当たり判定の形状から選びましょう。

キューブをバウンドさせよう

今度は、キューブを床に落とした時にバウンドさせてみます。

物理マテリアルの作成

Projectビュー内で右クリックし、Create > Physic Materialを選択して、物理マテリアルを作成します。

インスペクターから、Bouncinessを1にします。

キューブのBox ColliderのMaterialに、作成した物理マテリアルを設定します。

実行結果

ゲームを開始すると、キューブがバウンドするようになりました!

物理マテリアルのパラメーターについて

今回はBouncinessのみを変更しましたが、その他の物理マテリアルの設定できるパラメーターの詳細は、以下のUnity公式リファレンスを参照ください。

Physic Material - Unity マニュアル
Physic Material (物理マテリアル) は、衝突するオブジェクトの摩擦や跳ね返り効果を調整するのに使用されます。

おわりに

Rigidbodyの使い方と、物体を衝突させたり、重力を設定する方法の紹介でした!コードを書かずにここまで動かせるのは便利ですね。

Unityでの3Dゲームの作り方を基礎から学ぶにはこちら↓

タイトルとURLをコピーしました