UnityUnityメモ

Unityで固定ジョイントを使ってオブジェクトを繋ぐ!初心者向け簡単解説

Unity

1. はじめに

Unityには、ゲームオブジェクトに物理的な特性を加える「物理エンジン」が搭載されています。この物理エンジンを使えば、リアルな動きを簡単に再現できます。その中でも、「固定ジョイント(Fixed Joint)」は、オブジェクト同士を物理的に結びつける便利な機能です。

例えば、クレーンゲームのアームが景品を掴んで持ち上げる動きや、車のトレーラーが牽引される動きなどを再現する際に、この固定ジョイントを活用できます。

この記事では、Unityの「固定ジョイント」を使ってオブジェクトを接続する基本的な方法から、ジョイントを解除するスクリプトの実装方法まで、初心者向けにわかりやすく解説します。ゲーム開発に役立つスキルを一緒に学んでいきましょう!



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

2. 固定ジョイントの基本設定

ここでは、Unityの固定ジョイントを使って二つのオブジェクトを結びつける方法を解説します。キューブ(Cube)とスフィア(Sphere)を用いて、基本的な設定を行っていきます。


① キューブとスフィアを作成する

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリック
    メニューが表示されたら「3D Object」→「Cube」を選択し、シーンにキューブを作成します。
  2. 同じ手順で、「3D Object」→「Sphere」を選択し、スフィアを作成します。

② Rigidbodyを追加して物理演算を適用する

  1. CubeにRigidbodyを追加
    • キューブを選択し、インスペクター(Inspector)ウィンドウの「Add Component」ボタンをクリックします。
    • 「Rigidbody」を検索して追加します。
    • CubeのUse Gravityのチェックを外します(重力の影響を受けないようにするため)。
  2. SphereにRigidbodyを追加
    • Sphereにも同じ手順でRigidbodyを追加します。
    • SphereのUse Gravityはオンのままにしておきます。

③ Fixed Jointを追加してオブジェクトを接続する

  1. SphereにFixed Jointを追加
    • スフィアを選択し、インスペクターウィンドウで「Add Component」ボタンをクリックします。
    • 「Fixed Joint」を検索して追加します。
  2. Connected Bodyの設定
    • Fixed Jointの設定がインスペクターに表示されます。
    • Connected Body」フィールドに、キューブのRigidbodyコンポーネントをドラッグ&ドロップします。

これで、スフィアとキューブが物理的に結びつけられました。シーンを再生すると、スフィアが重力で落下しつつ、キューブと一緒に動く様子が確認できます。

次は、このジョイントをスクリプトを使って解除する方法を学びましょう!



3. スクリプトで固定ジョイントを解除する方法

ここでは、固定ジョイントをスクリプトを使って解除する方法を解説します。特定のキーを押すことでジョイントを解除できる仕組みを作りましょう。


① スクリプトを作成する

  1. プロジェクトウィンドウを右クリック
    Create」→「C# Script」を選び、新しいスクリプトを作成します。スクリプト名は「JointOff」とします。
  2. スクリプトをダブルクリックして開き、以下のコードを貼り付けます。
using UnityEngine;

public class JointOff : MonoBehaviour
{
    void Update()
    {
        // スペースキーが押されたらジョイントを解除
        if (Input.GetKeyDown("space"))
        {
            FixedJoint component = this.gameObject.GetComponent<FixedJoint>();
            if (component != null)
            {
                Destroy(component); // Fixed Jointコンポーネントを削除
            }
        }
    }
}

② スクリプトをオブジェクトにアタッチする

  1. ヒエラルキーウィンドウでスフィアを選択します。
  2. 作成した「JointOff」スクリプトを、スフィアにドラッグ&ドロップしてアタッチします。

③ 動作を確認する

  1. シーンを再生し、スペースキーを押します。
  2. スペースキーを押すと、スフィアのFixed Jointが削除され、キューブとの接続が解除されます。スフィアは自由に動ける状態になります。

これで、固定ジョイントをスクリプトで解除する仕組みが完成しました!応用すれば、ゲーム中のイベントや条件に応じて動的にオブジェクトを分離することが可能です。

次は、さらにキューブを動かす仕組みをスクリプトで追加してみましょう!



4. 応用:キューブの移動

ここでは、キーボードの矢印キーを使ってキューブを移動させるスクリプトを作成します。キューブを動かすことで、固定ジョイントの動作や解除後の挙動をより理解しやすくなります。


① スクリプトを作成する

  1. プロジェクトウィンドウを右クリック
    Create」→「C# Script」を選択し、新しいスクリプトを作成します。スクリプト名は「CubeMove」とします。
  2. 作成したスクリプトを開き、以下のコードを貼り付けます。
using UnityEngine;

public class CubeMove : MonoBehaviour
{
    void Update()
    {
        // 矢印キーの入力を取得して移動を制御
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3; // 水平方向
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3;   // 垂直方向

        // キューブの位置を更新
        transform.position = new Vector3(
            transform.position.x + dx, 
            2, // 固定高さ(地面からの高さを維持)
            transform.position.z + dz
        );
    }
}

② スクリプトをオブジェクトにアタッチする

  1. ヒエラルキーウィンドウでキューブを選択します。
  2. 作成した「CubeMove」スクリプトを、キューブにドラッグ&ドロップしてアタッチします。

③ 動作を確認する

  1. シーンを再生し、矢印キー(上下左右)を押してキューブを動かしてみましょう。
  2. キューブが自由に動き、その動きに合わせてスフィアが固定ジョイントを介して追従するのを確認できます。
  3. スペースキーを押して固定ジョイントを解除すると、スフィアがキューブから切り離され、独立して動く様子が確認できます。

応用アイデア

  • キューブの移動速度をスクリプトで調整してみる。
  • キューブに「回転」や「ジャンプ」などの追加機能を実装してみる。
  • スクリプトを改良し、特定の条件でジョイントを自動的に解除する仕組みを追加する。

これで、キューブを自由に動かしながら、固定ジョイントの動作と解除を試せる応用例が完成です!次のステップでは、この仕組みを使った具体的なゲームシステムを作ってみましょう!



5. おわりに

今回の記事では、Unityの「固定ジョイント(Fixed Joint)」を使って、オブジェクト同士を物理的に結びつける方法を解説しました。基本的な設定方法から、スクリプトを使ったジョイントの解除や応用的なキューブの移動まで、一通りの流れを体験できたと思います。



よくある質問(FAQ)

Q
固定ジョイントを使うと、どんな動きが可能になりますか?
A

固定ジョイントを使うと、オブジェクト同士を物理的に固定し、一緒に動かすことができます。例えば、クレーンゲームのアームや車のトレーラーの接続部分を再現できます。

Q
Rigidbodyの設定を変更すると挙動が変わりますか?
A

はい。特にMassDragの値を変更すると、物理的な動きやジョイントへの影響が変わるため注意が必要です。

Q
ジョイントを解除する方法は他にもありますか?
A

スクリプトでDestroy()を使用する以外にも、Fixed Jointのプロパティを変更して動的に解除する方法があります。