UnityUnityの使い方

Unityの使い方⑨ Rigidbodyでオブジェクトに物理を追加しよう

Unity

1. はじめに

こんにちは!Unityの使い方シリーズ第9回へようこそ!

Unityでゲームを作っていると、「もっとリアルな動きが欲しいなぁ」と思うことがありますよね?
例えば、キャラクターが坂を転がったり、物が重力で落ちたりするようなリアルな動き。
そんな時に役立つのが Rigidbody(リジッドボディ) です。

今回の記事では、Rigidbodyを使ってオブジェクトに物理を追加する方法を一緒に学んでいきましょう!

2. Rigidbodyとは?

Rigidbody(リジッドボディ)は、Unityでオブジェクトに物理的な動きを追加するためのコンポーネントです。これを使うと、Unityの物理エンジンが自動的にオブジェクトの重力や力の影響を計算してくれるので、リアルな挙動を簡単に実現できます。


Rigidbodyの主な特徴

  1. 重力をシミュレーションできる
    • Rigidbodyを追加すると、オブジェクトは自動的に重力で下に落ちるようになります。これで物が落ちたり、坂道を転がったりする挙動を作れます。
  2. 力を加えて動かせる
    • スクリプトで「力」や「速度」を加えることで、オブジェクトを思い通りに動かせます。例えば、ジャンプや弾丸の発射などに利用できます。
  3. 衝突のリアクションがリアルになる
    • Rigidbodyを持ったオブジェクト同士が衝突すると、重さや速度に応じたリアルな反応をします。これにより、よりリアルな物理挙動が再現可能です。

Rigidbodyを使うシーンの例

  • キャラクターがジャンプしたり、重力で坂を転がる。
  • ボールが壁にぶつかって跳ね返る。
  • 箱が積み重なって崩れる。

Rigidbodyは、Unityでリアルな物理的挙動を実現するために欠かせないツールです。次は、実際にRigidbodyをオブジェクトに追加して、その動きを確認してみましょう!




3. Rigidbodyをオブジェクトに追加してみよう

ここからは、実際にUnityのシーンにRigidbodyを追加して、オブジェクトに物理挙動を与える方法を解説します。とても簡単なので、ぜひ一緒にやってみてください!


手順1:3Dオブジェクトを作成する

まずはRigidbodyを適用するオブジェクトを作ります。

  1. Hierarchyウィンドウで右クリックします。
  2. メニューから「3D Object」→「Cube」を選択して、キューブを作成します。
  3. キューブがシーンに表示されます!これが物理挙動を加える対象になります。

手順2:Rigidbodyを追加する

次に、Rigidbodyコンポーネントをキューブに追加します。

  1. 作成したキューブをクリックして選択します。
  2. Inspectorウィンドウで、「Add Component」ボタンをクリックします。
  3. 検索バーに「Rigidbody」と入力します。
  4. 検索結果に表示される「Rigidbody」をクリックして追加します。

手順3:動きを確認してみよう

Rigidbodyを追加したオブジェクトは、重力の影響を受けます。

  1. 上部の再生ボタン(▶)を押して、ゲームを再生します。
  2. キューブが重力で下に落ちていくのが確認できます!

これでキューブに物理演算が適用されました!重力で自然に落下したり、他のオブジェクトと衝突した際にリアルな動きが再現されます。




4. Rigidbodyの主要な設定項目

Rigidbodyを使うと、Unityの物理演算を活用してリアルな挙動を簡単に実現できます。でも、Rigidbodyの設定をきちんと理解していないと、思い通りの動きにならないこともあります。

ここでは、Rigidbodyの主要な設定項目をわかりやすく解説します!


1. Mass(質量)

  • オブジェクトの「重さ」を設定します。
  • デフォルト値は 1
  • 質量が大きいほど、外力(衝突や重力など)による動きが遅くなります。
  • 例:
    • 軽いボール:Mass = 0.5
    • 重い岩:Mass = 10

2. Drag(抵抗)

  • オブジェクトが動くときに受ける「空気抵抗」のようなもの。
  • 値を大きくすると、物体の動きが早く減速します。
  • デフォルト値は 0(抵抗なし)。
  • 例:
    • 滑らかに動く:Drag = 0
    • ゆっくり止まる:Drag = 1

3. Angular Drag(回転抵抗)

  • オブジェクトが回転するときに受ける「回転抵抗」を設定します。
  • 値を大きくすると、回転が速く止まります。
  • デフォルト値は 0.05
  • 例:
    • 回転を維持する:Angular Drag = 0
    • 回転をすぐ止める:Angular Drag = 2

4. Use Gravity(重力を使用する)

  • チェックを入れると、オブジェクトが重力の影響を受けます。
  • チェックを外すと、重力の影響を無視します。
  • 例:
    • 重力で落下させたい:チェックを入れる
    • 浮遊する動きにしたい:チェックを外す

5. Is Kinematic(キネマティック)

  • チェックを入れると、物理演算の影響を受けなくなります。
  • スクリプトで移動や回転を制御したい場合に便利です。
  • 例:
    • NPCの移動をプログラムで制御したい:チェックを入れる
    • 自然に落下させたい:チェックを外す

6. Constraints(制約)

  • Rigidbodyの動きや回転を特定の軸で固定できます。
  • Freeze Position: 動きを特定の方向(X, Y, Z)で固定。
  • Freeze Rotation: 回転を特定の軸(X, Y, Z)で固定。
  • 例:
    • 床に固定して横移動だけさせたい:Freeze Position の Y 軸を固定。
    • 回転を止めて転がらないようにしたい:Freeze Rotation を設定。

設定項目の調整例

  1. ボールのような動き
    • Mass = 1, Drag = 0, Use Gravity = チェック, Constraints = なし。
  2. 木箱が滑らないように固定
    • Mass = 5, Drag = 1, Constraints = Freeze Position (Y 軸)。

Rigidbodyの設定を変えるだけで、オブジェクトの動き方が大きく変わります。次に進む前に、自分でいろいろな値を試してみてくださいね!




5. 力を加えて動かしてみよう

Rigidbodyを使うと、オブジェクトに物理演算が適用されるだけでなく、スクリプトを使って力(Force)を加えることで動きをコントロールすることもできます。

ここでは、簡単なスクリプトを使ってオブジェクトを動かす方法を解説します!


力を加える基本的な仕組み

Rigidbodyには、力を加えるためのメソッドがあります。以下が代表的な方法です。

  • AddForce(Vector3 force, ForceMode mode)
    • 指定した方向に力を加えます。
  • ForceMode
    • 力のかけ方を指定します。
    • Impulse: 瞬間的な力(例: ジャンプ)。
    • Force: 継続的な力(例: 風や水流の影響)。

手順1:スクリプトを作成する

  1. プロジェクトウィンドウで右クリック。
  2. Create」→「C# Script」を選択します。
    (Unity6では「Create」→「Scripting」→「C# Script」)
  3. スクリプト名を「AddForceExample」と入力します。

手順2:スクリプトに力を加える処理を記述する

スクリプトを開いて以下のコードを入力します。

using UnityEngine;

public class AddForceExample : MonoBehaviour
{
    public float force = 10f; // 力の大きさ

    void Start()
    {
        // Rigidbodyコンポーネントを取得
        Rigidbody rb = GetComponent<Rigidbody>();
        
        // 上方向(Y軸)に力を加える
        rb.AddForce(Vector3.up * force, ForceMode.Impulse);
    }
}

コードの解説

  1. Rigidbodyを取得
    • GetComponent<Rigidbody>()で、オブジェクトに付けたRigidbodyコンポーネントを取得します。
  2. 力を加える
    • AddForce(Vector3.up * force, ForceMode.Impulse)を使って、上方向(Y軸)に瞬間的な力を加えます。
    • Vector3.upは「上方向」を示すベクトルです。
  3. パラメータ
    • force変数で力の大きさを調整できます。

手順3:スクリプトをオブジェクトにアタッチする

  1. Hierarchyウィンドウで力を加えたいオブジェクト(例: Cube)を選択。
  2. 作成した「AddForceExample」スクリプトをドラッグ&ドロップでオブジェクトにアタッチします。

手順4:動作確認をする

  1. 再生ボタン(▶)を押してゲームを再生します。
  2. オブジェクト(Cube)が上方向にジャンプするのを確認しましょう!

応用:別の方向に力を加える

以下のコードを使えば、別の方向にも力を加えることができます。

  • 前方向(Z軸)に力を加える
    rb.AddForce(Vector3.forward * force, ForceMode.Impulse);
  • 斜め方向(XとYの両方)に力を加える
    rb.AddForce(new Vector3(1, 1, 0) * force, ForceMode.Impulse);

これで、Rigidbodyを使ってオブジェクトに力を加えて動かす方法がわかりました!
力の大きさや方向をスクリプトやUnityのインスペクターで調整して、思い通りの動きを作ってみましょう。




まとめ

今回の記事では、UnityのRigidbodyを使ってオブジェクトに物理演算を追加する方法を学びました。

Unityの物理演算を使いこなすことで、よりリアルでインタラクティブなゲームが作れるようになります。今回の内容をもとに、ぜひオリジナルのアイデアを実現してみてください!


Unity初心者でも簡単!アセットを活用してゲーム開発を加速しよう!

Unity Asset Storeには、初心者でもすぐに使える便利なアセットがたくさんあります。
でも「どれを使えばいいの?」「どう活用すればいいの?」と迷っていませんか?

この記事では、初心者向けのおすすめアセットとその活用法を詳しく解説!
ゲーム開発をもっと楽しく、効率的に進めたいなら必見です!




よくある質問

Q
Rigidbodyは2Dゲームでも使えますか?
A

はい、2Dゲームでは「Rigidbody2D」を使います。

Q
Rigidbodyを使わないと物理演算はできませんか?
A

基本的にはRigidbodyが必要です。
Unityの物理エンジンを使うためには、Rigidbodyをオブジェクトにアタッチする必要があります。ただし、アニメーションやスクリプトで疑似的な動きを作ることもできますが、重力や衝突などのリアルな挙動を簡単に実現するには、Rigidbodyを使うのがおすすめです。