UnityUnityメモ

Unityでリジッドボディの質量を変更して動きを観察しよう!

Unity

1. はじめに

Unityの物理エンジンを使えば、ゲーム開発でリアルな動きを簡単に再現することができます。その中でも、Rigidbody(リジッドボディ)は、オブジェクトに物理的な挙動を加えるための重要なコンポーネントです。

この記事では、「リジッドボディの質量を変更すると、動きにどのような違いが出るのか?」を実験してみます!地面となる平面と2つのCube(キューブ)を使い、質量を変えたときの動きの違いを観察してみましょう。

初心者の方でもわかりやすいように、スクリプトの作成から実験手順まで丁寧に解説していきます。この記事を通して、Unityの物理演算について楽しく学んでみましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. 必要な準備

実験を始める前に、Unityプロジェクトを設定し、必要なオブジェクトを準備しましょう。以下の手順に従えば、簡単に実験環境を構築できます!


① Unityプロジェクトの作成

まず、Unityを起動し、新しい3Dプロジェクトを作成します。プロジェクト名は「RigidbodyExperiment」など、わかりやすい名前にしましょう。


② 平面 (地面) の作成

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. メニューから「3D Object」→「Plane」を選択します。
    これで地面となる平面が作成されます。

ヒント: Planeはサイズが小さいと感じたら、スケールを変更して広げましょう。TransformのScaleを「5, 1, 5」などに設定すると十分な広さになります。


③ Cube (キューブ) の作成

次に、実験用のCubeを2つ作成します。

  1. 再びヒエラルキーを右クリックし、「3D Object」→「Cube」を選択します。
  2. 作成したCubeを「Cube1」と「Cube2」に名前を変更します。
  3. Cube1とCube2を平面の上に配置します。TransformのPositionを調整して、それぞれ少し離れた位置に置きましょう。

④ Rigidbodyコンポーネントの追加

  1. ヒエラルキーでCube1を選択します。
  2. インスペクター(Inspector)ウィンドウで「Add Component」をクリックし、「Rigidbody」と検索して追加します。
  3. 同じ手順で、Cube2にもRigidbodyコンポーネントを追加します。

⑤ Cubeの質量を設定

  1. Cube1のRigidbodyコンポーネント内の「Mass」フィールドを「1」に設定します。
  2. Cube2のMassを「10」に設定します。

これで、質量が異なる2つのCubeが完成しました!次は、スクリプトを作成してCubeに動きを加えてみましょう。



3. スクリプトの作成

次に、Cubeに力を加えて動かすスクリプトを作成します。このスクリプトを使って、質量の違いによる動きの変化を観察しましょう!


① スクリプトを新規作成する

  1. プロジェクトウィンドウを開きます(画面下部にあるエリア)。
  2. Scripts用のフォルダを作りましょう。
    • プロジェクトウィンドウを右クリック → 「Create」→「Folder」→ フォルダ名を「Scripts」にします。
  3. Scriptsフォルダを開き、右クリック → 「Create」→「C# Script」を選択します。
  4. スクリプトの名前を「CubeMovement」に変更します。

② スクリプトを編集する

  1. 作成した「CubeMovement」スクリプトをダブルクリックして、スクリプトエディタ(例:Visual Studio)が開きます。
  2. 以下のコードを入力します:
using UnityEngine;

// CubeMovementクラスを定義し、MonoBehaviourを継承しています。
public class CubeMovement : MonoBehaviour
{
    // Rigidbody型の変数rbをプライベートで宣言します。
    private Rigidbody rb;

    // 整数型のpublic変数forceを宣言し、力の大きさを格納します。
    public int force;

    // Startメソッドは、オブジェクトが最初にアクティブになった時に一度だけ呼ばれます。
    void Start()
    {
        // オブジェクトにアタッチされているRigidbodyコンポーネントを取得し、rb変数に格納します。
        rb = GetComponent<Rigidbody>();

        // 力の大きさを設定します。必要に応じて値を変更してください。
        force = 100;

        // Rigidbodyに対してAddForceメソッドを呼び出し、Z軸方向に力を加えます。
        // 力のモードとしてImpulse(衝撃)を使用して、瞬間的に力を加えます。
        rb.AddForce(0, 0, force, ForceMode.Impulse);
    }
}

このスクリプトでは、RigidbodyにZ軸方向へ力を加えることで、Cubeを動かします。




4. スクリプトをアタッチ

スクリプトを作成したら、それをCubeオブジェクトにアタッチして動きを適用できるようにします。この手順を行えば、Unityエディター上でスクリプトが実行され、Cubeが動き出します!


① スクリプトをCubeにアタッチする

  1. ヒエラルキー(Hierarchy)ウィンドウで「Cube1」を選択します。
  2. プロジェクト(Project)ウィンドウの「Scripts」フォルダを開きます。
  3. 作成した「CubeMovement」スクリプトを、ヒエラルキー内の「Cube1」にドラッグ&ドロップします。

② Cube2にも同じスクリプトをアタッチ

  1. 同じ手順で、Cube2にも「CubeMovement」スクリプトをドラッグ&ドロップしてアタッチします。

③ インスペクターで確認

  1. 「Cube1」を選択すると、インスペクター(Inspector)ウィンドウに「CubeMovement」スクリプトが追加されていることを確認できます。
  2. スクリプト内の「Force」フィールドが表示されているはずです。この値はスクリプトで設定済み(例:100)なので、特に変更は不要です。

これでスクリプトの設定は完了です!次は、この実験結果を詳しく観察し、質量の違いが動きにどう影響するかを解説します。



5. 実験:質量を変える

これまでの準備が整ったので、いよいよ実験です!質量を変更した2つのCubeがどのように動くかを観察しましょう。


① シミュレーションを開始

  1. Unityエディター上部の「Play」ボタンをクリックして、シミュレーションを開始します。
  2. Cube1とCube2がZ軸方向に動く様子を観察してください。

② 実験結果を観察する

  • Cube1(質量が1):
    • 軽いため、スクリプトで設定された力を受けて速く移動します。
  • Cube2(質量が10):
    • 重いため、同じ力を受けても移動が遅くなります。

この違いは、力(F=ma) の法則によるものです。質量が大きいほど、同じ力では加速度が小さくなるため、Cube2はゆっくりと動きます。


③ 結果を記録する

  • 質量が異なる物体がどのように動くか、速度や加速度に注目してメモを取ると良いでしょう。
  • Unityエディター内で、SceneビューGameビューを切り替えて観察することで、動きを詳細に確認できます。

④ 動作に問題がある場合

もしCubeが動かない場合は以下を確認してください:

  • Rigidbodyコンポーネントが正しく追加されているか。
  • スクリプトがCubeに正しくアタッチされているか。
  • 平面(Plane)の位置に問題がないか。

これで実験は完了です!次のステップでは、結果の詳細な解説を行い、なぜこのような動きの違いが起こるのかを物理演算の視点から説明します。



6. 結果の解説

実験を通して、リジッドボディ(Rigidbody)の質量がオブジェクトの動きにどのように影響するかを観察できました。それでは、結果を詳しく解説していきましょう。


① 観察結果のまとめ

  • Cube1(質量 = 1)
    軽いため、スクリプトで設定した力(Impulse)を受けて速く移動しました。
  • Cube2(質量 = 10)
    重いため、同じ力を受けても移動速度が遅くなりました。

② 物理法則での解釈

Unityの物理エンジンは現実の物理法則をシミュレートしています。この場合、**ニュートンの運動方程式(F = ma)**が適用されます。

  • F = ma の関係式:
    • FFF:加えられた力(スクリプトで設定した100のImpulse)
    • mmm:質量(Mass)
    • aaa:加速度

この式によれば、質量が大きいほど、加速度(a)は小さくなります。同じ力を加えても、重い物体ほどゆっくり動くのはこのためです。


③ UnityにおけるForceMode.Impulseの効果

今回使用したForceMode.Impulseは、瞬間的な力(Impulse)を加える設定です。これにより、物体に一度だけ力が加わり、その結果として加速度と速度が決定されました。

  • Cube1: 質量が小さいため、加速度が大きくなり、速く移動。
  • Cube2: 質量が大きいため、加速度が小さくなり、ゆっくり移動。

④ 実験の応用

質量や加える力の大きさを変更してみることで、さらに多くのシナリオを試すことができます。

  • 質量を極端に軽くする(例:0.1)
    → とても速く動く。
  • 質量を極端に重くする(例:100)
    → ほとんど動かないように見える。
  • 力の方向を変える(例:X軸やY軸)
    → 他の方向への挙動も観察可能。

⑤ なぜ質量の違いを理解するのが重要か?

Unityでゲームを作る際、物体の質量を正しく設定することで、リアルな動きを再現できます。例えば:

  • キャラクターのジャンプや走る速度。
  • 車やボールなどの物理シミュレーション。
  • 重力を使ったリアルなゲームプレイ。

質量は物理挙動に大きな影響を与えるため、実験を通じてその仕組みを理解することは非常に重要です。


この実験を通じて、Rigidbodyの「Mass」プロパティが動きにどのように影響を与えるかを学びました。Unityの物理エンジンは直感的に使える一方で、現実の物理法則に基づいているため、基本を理解することで、よりリアルで魅力的なゲームを作ることができます!



7. まとめ

今回の記事では、UnityのRigidbodyコンポーネントを使って、質量が物体の動きに与える影響を観察する実験を行いました。以下に、重要なポイントを振り返ります。


① 実験で学んだこと

  • Rigidbodyと質量の関係性
    質量が小さいほど、同じ力で速く動き、質量が大きいほどゆっくり動く理由を物理法則(F = ma)を用いて理解しました。
  • Unityの物理エンジンの挙動
    Rigidbodyの「Mass」プロパティやForceMode.Impulseを使った力の加え方を実際に試し、物理演算の基本を体験しました。

② ゲーム開発への応用

  • ゲーム内のオブジェクトに物理的な動きを与える際、質量の設定はリアルな動きの再現に欠かせません。たとえば:
    • キャラクターのジャンプの高さを調整する。
    • ボールが転がる速さや跳ねる挙動を設定する。
    • 車の加速や衝突の挙動をシミュレーションする。

これらの要素を正確に再現するためには、Rigidbodyの仕組みを理解しておくことが重要です。


③ 次に挑戦すること

今回の実験をもとに、以下のような応用シナリオに挑戦してみるのもおすすめです:

  • 質量だけでなく、Drag(空気抵抗)やAngular Drag(回転の抵抗)を調整して挙動を観察する。
  • ForceMode.ForceForceMode.Accelerationを使って、異なる力の加え方を試す。
  • プレイヤーがインタラクティブに物体を操作できるシステムを作成する。

Unityの物理演算を理解することで、よりリアルで魅力的なゲームが作れるようになります。今回の実験はその第一歩です!ぜひ今回学んだ内容を活かして、自分だけのオリジナルなゲームを開発してみてください。




よくある質問 (FAQ)

Q
Rigidbodyの質量はどこで設定できますか?
A

Rigidbodyコンポーネントの「Mass」フィールドで設定できます。

Q
質量を変えても動きが変わりません。どうすればいいですか?
A

Rigidbodyに適用している力や摩擦の設定を確認してください。

Q
他の物理特性も試せますか?
A

はい。ドラッグやアンガラー・ドラッグなどを変更して動き方を比較できます。

おすすめのアセット

「8 Ball Pool – Billiard Multiplayer Completed Game」は、Unity Asset Storeで提供されるマルチプレイヤー対応のビリヤードゲームテンプレートです。このアセットを使えば、手軽に本格的な8ボールプールゲームを開発できます。

概要

このアセットは、完成されたビリヤードゲームであり、マルチプレイヤー機能が標準搭載されています。Unity環境で簡単にカスタマイズでき、オリジナルのビリヤードゲームを短時間で作成可能です。

特徴

  • マルチプレイヤー機能:オンラインで他のプレイヤーと対戦可能。
  • 美しいグラフィック:リアルなビリヤード台やボールのデザイン。
  • 簡単カスタマイズ:スクリプトやオブジェクトを自由に編集。
  • クロスプラットフォーム:PCやモバイル端末で動作。