Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ UnityにおけるRigidbody | Unity物理
Unity初心者向け

bookUnityにおけるRigidbody

メニューを表示するにはスワイプしてください

Unityにおいて、リジッドボディはゲームオブジェクトに取り付けることで現実的な物理挙動をシミュレートできる重要なコンポーネント。これにより、オブジェクトは現実世界の物理法則に近い形で移動や他のオブジェクトとの相互作用が可能となる。例えば、重力によって落下したり、他のオブジェクトに跳ね返ったりによって押されたりする。Unityのリジッドボディシステムを利用することで、よりダイナミックインタラクティブなゲーム環境の構築が可能。

コンポーネントベース

リジッドボディは、ゲームオブジェクトに追加することで物理特性を付与できるコンポーネントの一つ。

物理シミュレーション

ゲームオブジェクトにリジッドボディコンポーネントが追加されると、Unityの物理エンジンがそのオブジェクトの他オブジェクトとの相互作用をシミュレートする。これには以下が含まれる:

  • 重力のシミュレーション:オブジェクトは現実世界と同様に地面に向かって落下する;
  • 力の適用:オブジェクトを押したり引いたりして動かすことができる;
  • 衝突の検出:オブジェクト同士がぶつかった際、Unityが反応を計算する;
  • 衝突の解決:オブジェクト同士がすり抜けず、現実的に反応するように調整される。

プロパティ

Unityのリジッドボディには、ゲーム内での挙動を変更するために調整可能な複数のプロパティが存在します。以下はその簡単な概要です:

  • Mass(質量):オブジェクトの重さ。質量が大きいほど、動かすのが難しくなります;
  • Drag(抵抗):空気抵抗のようなもの。値が大きいほど、オブジェクトは空気中でゆっくり動きます;
  • Angular Drag(角度抵抗):抵抗と似ていますが、回転に影響します。値が大きいほど、回転が遅くなります;
  • Constraints(制約):オブジェクトの移動や回転を制限するルール。例えば、制約を設定することでオブジェクトの回転を止めることができます。

相互作用

Unityのリジッドボディは、他のリジッドボディや物理ベースのオブジェクトと相互作用できます。仕組みは以下の通りです:

  • Collisions(衝突):2つのリジッドボディが衝突すると、Unityの物理エンジンが力を計算し、それに応じて運動が変化します。これにより、オブジェクト同士が跳ね返ったり、転がったり、滑ったりと、現実世界のような動きを再現できます;
  • Realistic Simulations(リアルなシミュレーション):これらの相互作用によって、ゲームの世界にリアリティや臨場感が生まれます。

スクリプト統合

Unityでは、スクリプトを使ってリジッドボディを制御することも可能です。これにより、ゲームのロジックに基づいてオブジェクトを動かしたり、特定の反応をさせたりできます。仕組みは以下の通りです:

  • UnityのスクリプトAPI:ゲームオブジェクトに対してUnityに指示を出すためのツールやコマンドのセット;
  • 動的な操作:ゲーム実行中にオブジェクトの挙動を変更可能。例えば、プレイヤーがボタンを押したときにボールをジャンプさせることができます;
  • ゲームロジックとユーザー入力:スクリプトによって、プレイヤーの操作やゲーム内の出来事に応じた複雑な相互作用を作成できます。
[SerializeField] Rigidbody2D rb;

private void Start()

private void Update()
{
    Vector2 oldVelocity = rb.velocity;
    if (Input.GetKeyDown(KeyCode.Space))
    {
        oldVelocity.y = 6;
        oldVelocity.x = 4;
        rb.velocity = oldVelocity;
    }
}

Note

このスクリプトについては、第2セクションの最後の章ですでに説明しています。忘れた場合はそちらを確認してください。

こちらが動画内の例です:

[SerializeField] Rigidbody2D rb;

private void Update()
{
    float x = Input.GetAxis("Horizontal");
    float y = Input.GetAxis("Vertical");

    Vector2 direction = new Vector2(x, y);
    rb.AddForce(direction, ForceMode2D.Force);
}
  • Rigidbody2Dの宣言: Rigidbody2D rb; はオブジェクトの物理コンポーネントを保持する変数で、移動を可能にする;

  • Updateメソッド: Update() メソッドは毎フレーム実行され、プレイヤーの入力を常に監視する;

  • 入力検出: Input.GetAxis("Horizontal") および Input.GetAxis("Vertical") は矢印キーやWASDキーからのキーボード入力を検出し、移動方向を示す値を返す;

  • 方向ベクトル: 入力値を使用して Vector2 という名前の direction が作成され、オブジェクトが移動すべき方向を表す;

  • 力の適用: rb.AddForce(direction, ForceMode2D.Force); は指定した方向に連続的な力をオブジェクトに加え、滑らかに移動させる。

ユースケース

リジッドボディは、ゲーム内でキャラクター、車両、弾丸、環境要素などのシミュレーションによく使用される。リアルで没入感のあるゲームプレイ体験を作成するために不可欠な要素。

1. Unityにおけるリジッドボディとは何か?

2. リジッドボディのどのプロパティがオブジェクトの重さを定義しますか?

question mark

Unityにおけるリジッドボディとは何か?

正しい答えを選んでください

question mark

リジッドボディのどのプロパティがオブジェクトの重さを定義しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  3
some-alt