はじめに
こんにちは、皆さん!今日は、Unityの「固定ジョイント(Fixed Joint)」を使って、二つのオブジェクトを繋げたり、繋がりを解除する方法を紹介します。この機能を使えば、オブジェクト同士を物理的に結びつけることができます。さあ、始めましょう!
オブジェクトの繋がりを解除する
例えば、ゲーム内でプレーヤーが特定のアクション(スペースキーの押下)を行った時に、オブジェクト間のジョイントを解除し、その結果として一方のオブジェクト(例: Sphere)が落下するような仕組みを作る方法を解説しましょう。以下のステップに分けて実装できます。
1. 新しいプロジェクトを作成する
まずは、新しいUnityプロジェクトを作成しましょう。Unity Hubを開いて、「New」ボタンをクリックし、新しいプロジェクトを作成します。
2. 3Dオブジェクトを作成する
プロジェクトが作成されたら、次に二つの3Dオブジェクトを作成します。
- ヒエラルキー(Hierarchy)ウィンドウを右クリックして、「3D Object」→「Cube」を選んで、キューブを作成します。
- 同じ手順で「3D Object」→「Sphere」を選んで、スフィアを作成します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-18_003355.png)
オブジェクトにリジッドボディ(Rigidbody)を追加する
次に、オブジェクトにリジッドボディを追加して、物理演算を適用します。
- 各オブジェクトを選択し、インスペクター(Inspector)ウィンドウを開きます。
- 「Add Component」ボタンをクリックし、「Rigidbody」を選択します。
- CubeのUseGravityのチェックを外します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-18_005344.png)
固定ジョイント(Fixed Joint)を追加する
それでは、固定ジョイントを追加して、二つのキューブを繋げましょう。
- まず、Sphereを選択します。
- インスペクターウィンドウで「Add Component」ボタンをクリックし、「Fixed Joint」を選びます。
- Fixed Jointの設定が表示されたら、「Connected Body」フィールドにもう一つのキューブのRigidbodyをドラッグ&ドロップします。
これで、二つのキューブが固定ジョイントで繋がりました!
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-18_021654.png)
移動用スクリプトを作成する
まず、Unityエディタで新しいスクリプトを作成します。
- プロジェクトウィンドウを右クリックします。
- 「Create」→「C# Script」を選びます。
- スクリプト名を「CubeMove」とします。
スクリプトを編集する
次に、作成したスクリプトをダブルクリックして、コードエディタ(例:Visual Studio)で開きます。以下のコードを入力します:
using System.Collections;
using System.Collections.Generic;
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
);
}
}
スクリプトをアタッチする
次に、このスクリプトをオブジェクトにアタッチします。
- ヒエラルキーウィンドウで、キューブを選択します。
- スクリプトファイルを選択したキューブにドラッグ&ドロップします。
「Fixed Joint」をスペースキーで解除するスクリプト
まず、Unityエディタで新しいスクリプトを作成します。
- プロジェクトウィンドウを右クリックします。
- 「Create」→「C# Script」を選びます。
- スクリプト名を「JointOff」とします。
2. スクリプトを編集する
次に、作成したスクリプトをダブルクリックして、コードエディタ(例:Visual Studio)で開きます。以下のコードを入力します:
using UnityEngine;
public class JointOff : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown("space"))
{
FixedJoint component = this.gameObject.GetComponent<FixedJoint>();
Destroy(component);
}
}
}
このスクリプトでは、Update
メソッド内でスペースキーが押されたかどうかをチェックし、押された場合はFixedJoint
コンポーネントを削除します。
3. スクリプトをアタッチする
次に、このスクリプトをオブジェクトにアタッチします。
- ヒエラルキーウィンドウで、
Fixed Joint
を追加したスフィアを選択します。 - スクリプトファイルを選択したスフィアにドラッグ&ドロップします。
テストする
スクリプトをアタッチしたら、シーンを再生してスペースキーを押してみましょう。Fixed Joint
が削除され、オブジェクトが繋がりを解除されるはずです。
まとめ
今日は、Unityで固定ジョイントを使って二つのオブジェクトを繋げたり、繋がりを解除する方法を学びました。この機能を使えば、ゲームやシミュレーションで複雑な物理的関係を簡単に設定できます。ぜひ、いろいろ試してみてくださいね!