UnityUnityメモ

Unityで2つのオブジェクトを同時に回転!初心者向け左右キー連動スクリプトの作り方

Unity

1. はじめに

Unityでゲームを作っていると、「2つのオブジェクトを同時に動かしたい」と思う場面に出会うことがありませんか?例えば、プレイヤーキャラクターとその影、または鏡像のように連動するオブジェクトを表現したい場合です。

この記事では、左右キーを使って1つのCubeを回転させ、その動きに合わせてもう1つのCubeも同じ向きに回転する方法を解説します。Unity初心者でも簡単に実践できる手順と、具体的なコード例を交えて説明するので安心してください!


この記事を通じて、以下のスキルを身につけることができます:

  • Unityでオブジェクトを回転させる方法
  • スクリプトで複数のオブジェクトを連動させる方法
  • Input.GetAxisTransform.Rotateの基本的な使い方

ゲーム開発の基礎となる技術の1つとして、ぜひこの記事を参考にしながら実践してみましょう!

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



2. シーンの準備

まず、シーンに2つのCube(赤いCubeと青いCube)を配置して準備を進めましょう。このステップでは、Unityの基本操作を使ってオブジェクトを作成し、それぞれのCubeに色をつけていきます。

2-1. Cubeを作成する

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. メニューから「3D Object」→「Cube」を選択します。
  3. もう1度同じ手順でCubeをもう1つ作成します。

これで、シーンに2つのCubeが追加されました。

2-2. Cubeに色をつける

次に、作成したCubeに色をつけてわかりやすくします。以下の手順に従って、赤と青のCubeを作りましょう。

  1. マテリアルを作成する
    1. プロジェクト(Project)ウィンドウを右クリックし、「Create」→「Material」を選択します。
    2. 作成されたマテリアルをそれぞれ「RedMaterial」と「BlueMaterial」と名前を付けます。
  2. マテリアルの色を変更する
    1. 「RedMaterial」を選択し、インスペクター(Inspector)ウィンドウで「Albedo」の色を赤に設定します。
    2. 同様に「BlueMaterial」を選択し、「Albedo」の色を青に設定します。
  3. Cubeにマテリアルを適用する
    1. ヒエラルキーウィンドウで1つ目のCubeを選択し、「RedMaterial」をドラッグしてCubeにドロップします。
    2. 2つ目のCubeには「BlueMaterial」をドラッグしてドロップします。

2-3. Cubeを適切に配置する

Cubeが重ならないように、それぞれ少し離して配置しましょう。

  1. ヒエラルキーで赤いCubeを選択し、インスペクターの「Transform」セクションでPosition(-1, 0, 0)に設定します。
  2. 同様に青いCubeを選択し、Position(1, 0, 0)に設定します。

これで、赤いCubeと青いCubeが並んでシーンに配置されました!
以下のような画面になっていれば、シーンの準備は完了です。


完成イメージ

  • 赤いCubeと青いCubeが並んで配置されています。
  • 赤いCubeが左、青いCubeが右に配置され、それぞれ異なる色が適用されています。

次は、これらのCubeを同時に回転させるためのスクリプトを作成していきます!



3. スクリプトの作成

ここでは、赤いCubeを左右キーで回転させ、その動きに合わせて青いCubeも同じ方向に回転するスクリプトを作成します。スクリプト作成はUnityの基本的な操作の一部であり、初心者の方でも簡単に進められる手順です。


1. スクリプトを作成する

まず、以下の手順で新しいスクリプトを作成します。

  1. プロジェクトウィンドウを右クリックします。
  2. 表示されたメニューから「Create(作成)」→「C# Script」を選択します。
  3. スクリプトに「CubeRotator」という名前を付けます。

作成したスクリプトがプロジェクトウィンドウに表示されます。


2. スクリプトを編集する

作成した「CubeRotator」スクリプトをダブルクリックして開き、以下のコードを記述してください。

using UnityEngine;

public class CubeRotator : MonoBehaviour
{
    public GameObject redCube;  // レッドのCubeをアタッチするための変数
    public GameObject blueCube; // ブルーのCubeをアタッチするための変数
    public float rotationSpeed = 100f;  // 回転速度

    void Update()
    {
        // レッドのCubeを左右キーで回転させる
        float horizontalInput = Input.GetAxis("Horizontal");
        redCube.transform.Rotate(Vector3.up * horizontalInput * rotationSpeed * Time.deltaTime);

        // レッドのCubeの回転を取得して、ブルーのCubeにも適用
        blueCube.transform.rotation = redCube.transform.rotation;
    }
}

3. コードのポイント解説

  • public GameObject redCubepublic GameObject blueCube
    • 赤いCubeと青いCubeをそれぞれアタッチするための変数です。
    • Unityエディターのインスペクターから、これらの変数に対応するオブジェクトを指定します。
  • Input.GetAxis("Horizontal")
    • キーボードの左右キーやA/Dキーの入力を取得します。
    • 左右キーを押すと、-1から1までの値を返し、その値に基づいてCubeを回転させます。
  • redCube.transform.Rotate(Vector3.up * horizontalInput * rotationSpeed * Time.deltaTime)
    • 赤いCubeを回転させるコードです。
    • Vector3.up はY軸方向(上下方向)を表し、回転の方向を指定します。
    • Time.deltaTime を使用することで、回転速度がフレームレートに依存しないように調整しています。
  • blueCube.transform.rotation = redCube.transform.rotation
    • 赤いCubeの現在の回転を青いCubeに適用しています。
    • このコードによって、青いCubeが赤いCubeと同じ向きに回転します。

これでスクリプトの準備は完了です!次のステップでは、このスクリプトをUnityシーン内のオブジェクトにアタッチし、実際に動作するよう設定します。



4. スクリプトのアタッチと設定

スクリプトが完成したら、それをシーン内のオブジェクトにアタッチして、正しく動作するよう設定を行います。ここでは、赤いCube(以下「RedCube」)にスクリプトをアタッチし、インスペクターで必要な設定をする方法を解説します。


1. スクリプトをアタッチする

  1. Unityエディターのヒエラルキーウィンドウで、赤いCube(RedCube)をクリックして選択します。
  2. 作成した「CubeRotator」スクリプトを、プロジェクトウィンドウからドラッグして、ヒエラルキーウィンドウ内のRedCubeにドロップします。
    • スクリプトが正しくアタッチされると、インスペクターに「CubeRotator」という項目が表示されます。

2. スクリプトの設定

スクリプトのパブリック変数(redCubeblueCube)に、それぞれ赤いCubeと青いCubeを設定する必要があります。

  1. ヒエラルキーウィンドウで、スクリプトをアタッチしたRedCubeを選択します。
  2. インスペクターウィンドウを確認し、「CubeRotator」コンポーネント内の次の項目を設定します。
    • Red Cube: ヒエラルキーから赤いCube(RedCube)をドラッグして、このフィールドにドロップします。
    • Blue Cube: ヒエラルキーから青いCube(BlueCube)をドラッグして、このフィールドにドロップします。
  3. 必要に応じて「Rotation Speed」の値を変更できます(初期値は100に設定されています)。ここで回転の速さを調整できます。

3. 設定を保存する

設定が完了したら、シーンを保存しておきましょう。

  • メニューバーから「File」→「Save」を選択するか、Ctrl + S(Macの場合はCmd + S)を押してください。

これでスクリプトのアタッチと設定は完了です!次はゲームを実行して、スクリプトが正しく動作するかを確認してみましょう。



5.実行と確認

まず、Unityエディターの上部にある**「再生ボタン ▶︎」**をクリックしてゲームを実行します。再生モードに切り替わると、シーン内のオブジェクトが動作するようになります。


左右キーで操作

ゲームが再生されたら、キーボードの**左右キー(← →)**を押してみましょう。すると、以下のような動作が確認できるはずです:

  • 赤いCubeが左右に回転します。
  • 青いCubeも赤いCubeと同じ向きに回転します。

動作確認ポイント

以下のポイントをチェックして、スクリプトが正しく動作しているか確認しましょう:

  1. スムーズに回転しているか?
    • Cubeがカクついたり、途中で止まったりしていないか確認します。
  2. 両方のCubeが同じ向きに回転しているか?
    • 赤いCubeと青いCubeの回転方向が一致しているかをチェックします。

トラブルシューティング

もし動作が期待通りでない場合、以下を確認してみてください:

  • Cubeが動かない場合
    • スクリプトが赤いCubeに正しくアタッチされているかを確認します。
    • インスペクターで「RedCube」と「BlueCube」に正しいオブジェクトが設定されているかを確認します。
  • 動きが不自然な場合
    • 回転速度が速すぎたり遅すぎたりする場合は、スクリプト内のrotationSpeedの値を調整してみてください。

すべてが正常に動作している場合は、今回のスクリプトが正しく機能している証拠です!ここからさらに他のオブジェクトを追加したり、回転の動作にアニメーションを組み合わせたりして、より高度なプロジェクトを目指してみましょう。



よくある質問

Q
Cubeが回転しない場合の原因と対策は?
A

Cubeが回転しない場合、以下の点を確認してください:

  • スクリプトが赤いCubeに正しくアタッチされているか。
  • インスペクターで「RedCube」に赤いCube、「BlueCube」に青いCubeが正しく設定されているか。
  • キーボードの左右キーが正しく動作しているか(キーボード入力に問題がないかを確認)。
  • スクリプトにエラーがないか(エディターのコンソールでエラーメッセージを確認)。
Q
回転速度を調整する方法は?
A

回転速度はスクリプト内のrotationSpeed変数で調整できます。デフォルトでは100fに設定されていますが、これを変更することで速度を速くしたり遅くしたりできます。例えば、以下のように変更してください:

public float rotationSpeed = 200f; // 回転速度を2倍に

また、インスペクターから直接値を編集することも可能です。

Q
他のオブジェクトにも同様の動作を適用する方法は?
A

他のオブジェクトにも同様の動作を適用するには、スクリプトの変数に新しいオブジェクトを設定すれば簡単です。例えば、青いCube以外のオブジェクトを回転させたい場合は、インスペクターで「BlueCube」に該当するオブジェクトを指定するだけで同じ動作を実現できます。

おすすめのアセット

「TopDown Engine」は、トップダウン視点のゲームを簡単に作成できるUnity用のテンプレートです。アクションRPG、シューティング、探索ゲームなど、幅広いジャンルのゲームを素早くプロトタイプから完成まで進められるのが特徴です。このエンジンは、2Dと3D両方のゲームに対応しており、動きやインタラクション、カメラ、戦闘システム、インベントリ機能など、トップダウンゲームに必要な基本要素が揃っています。