UnityUnityメモ

【Unity】switch文でオブジェクトを切り替え!キー操作で簡単に制御する方法

Unity

1.はじめに

ゲーム開発をしていると、キー操作でオブジェクトを切り替えたい場面が出てきますよね?たとえば、プレイヤーが武器を持ち替えたり、キャラクターの見た目を変更したりするときに使えます。

このような処理は if 文を使って書くこともできますが、条件が増えるとコードが長くなり、見づらくなってしまいます。そこで便利なのが switch 文です! switch 文を使えば、スッキリとしたコードでオブジェクトの切り替えができます。

この記事では、左右キー(← →)を押すたびに CubeSphereCylinder を順番に切り替える方法 を紹介します。初心者の方でも簡単に実装できるので、一緒に試してみましょう!

ちなみに、スクリプトを書くのがちょっと苦手…という方には、
コードを書かずにゲームの動きを作れるビジュアルスクリプティングツール「PlayMaker」もおすすめです!
もっと直感的にロジックを組みたい人は、そちらもチェックしてみてください。



2. 事前準備

それでは、実際にUnityでオブジェクトを切り替えるスクリプトを作る準備をしていきましょう。まずは、シーンに必要なオブジェクトを配置していきます。


① Unityの新規プロジェクトを作成

まず、Unityを開いて 3Dテンプレート で新しいプロジェクトを作成してください。プロジェクト名は「SwitchObject」としておくと分かりやすいでしょう。


② 3Dオブジェクトを作成

オブジェクトを切り替える対象として、「Cube」「Sphere」「Cylinder」の3つを作成します。

  1. Hierarchy ウィンドウで右クリック
  2. 「3D Object」 → 「Cube」 を選択
  3. 同じ手順で「Sphere」と「Cylinder」も作成

オブジェクトの名前をわかりやすくするため、
Cube, Sphere, Cylinder にそれぞれリネームしておきましょう。


③ オブジェクトを非表示にする

作成した3つのオブジェクトのうち、最初に表示するのは Cube のみにします。
SphereCylinder は、最初は見えないように 非アクティブ にしておきます。

  1. HierarchySphere をクリックし、 Inspector ウィンドウを開く
  2. Inspector 内の チェックボックス (GameObjectのアクティブ状態) をオフにする
  3. 同じ手順で Cylinder も非アクティブにする

これで、ゲーム開始時には Cube だけが表示される状態になります。


④ 空のオブジェクトを作成

次に、3Dオブジェクトを管理するための 空のオブジェクト を作成します。

  1. Hierarchy ウィンドウで 右クリック → Create Empty を選択
  2. 作成された GameObjectObjectManager にリネーム

このオブジェクトに、スクリプトをアタッチして キー操作でオブジェクトを切り替える処理 を実装していきます。


これで、スクリプトを適用するための 事前準備 は完了です!次のステップでは、switch 文を使って キー操作でオブジェクトを切り替えるスクリプト を作成していきます。




3. スクリプトの作成

では、オブジェクトを切り替えるスクリプトを作成していきましょう!

まずは ChangeObject.cs という名前のスクリプトを作成し、それを空のオブジェクトにアタッチします。


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

  1. Project ウィンドウを開く
  2. 右クリック → Create → C# Script を選択
  3. 新しいスクリプトの名前を ChangeObject に変更

💡ポイント: スクリプト名は後から変更することもできますが、間違えないように最初から適切な名前をつけるのがオススメです!


2. スクリプトを空のオブジェクトにアタッチ

次に、このスクリプトをヒエラルキーの空のオブジェクトにアタッチしましょう。

  1. Hierarchy ウィンドウで 右クリック → Create Empty を選択
  2. 作成された「GameObject」の名前を ObjectManager に変更(分かりやすくするため)
  3. ChangeObject.csドラッグ&ドロップ して ObjectManager にアタッチ!

💡ポイント: スクリプトをオブジェクトにアタッチすることで、ChangeObject のコードが ObjectManager に適用され、スクリプトが正しく動作するようになります。


これで、スクリプトの準備が完了しました!
次は、スクリプトの中身を記述していきます。




4. スクリプトの記述

スクリプトを開いて、以下のコードを入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeObject : MonoBehaviour
{
    public GameObject cube;      // Cubeのオブジェクト
    public GameObject sphere;    // Sphereのオブジェクト
    public GameObject cylinder;  // Cylinderのオブジェクト
    public int count;            // 切り替え用のカウンター

    void Start()
    {
        count = 1; // 初期状態をCubeに設定
    }

    void Update()
    {
        // 右キーを押したらカウントを増やす
        if (Input.GetKeyDown(KeyCode.RightArrow)){
            count++;
            if(count > 3){ // 3を超えたら1に戻す
                count = 1;
            }
        }

        // 左キーを押したらカウントを減らす
        if (Input.GetKeyDown(KeyCode.LeftArrow)){
            count--;
            if(count < 1){ // 1より小さくなったら3に戻す
                count = 3;
            }
        }

        // countの値に応じてオブジェクトの表示を切り替える
        switch(count)
        {
            case 1:
                cube.SetActive(true);
                sphere.SetActive(false);
                cylinder.SetActive(false);
                break;

            case 2:
                cube.SetActive(false);
                sphere.SetActive(true);
                cylinder.SetActive(false);
                break;
            case 3:
                cube.SetActive(false);
                sphere.SetActive(false);
                cylinder.SetActive(true);
                break;
        }
    }
}

③ スクリプトの解説

このスクリプトでは、キー操作によってオブジェクトの表示を切り替える処理 を行っています。

  • public GameObject cube, sphere, cylinder;
    CubeSphereCylinder のオブジェクトを取得するための変数を作成
  • int count;
    → どのオブジェクトを表示するかを管理するためのカウンター変数
  • Start() メソッド
    → ゲーム開始時に count = 1 を設定し、最初に Cube を表示するようにする
  • Update() メソッド
    • キーを押したら count を増やす
    • キーを押したら count を減らす
    • count の値が 1 から 3 の範囲を超えないようにループ処理
  • switch(count) を使って、count の値に応じて SetActive(true)SetActive(false) でオブジェクトを切り替え

④ スクリプトをオブジェクトに適用

次に、Hierarchy ウィンドウで 空のオブジェクト を選択し、InspectorChangeObject スクリプトの 「Cube」「Sphere」「Cylinder」 の欄に、それぞれ対応するオブジェクトを ドラッグ&ドロップ で設定してください。




5. 実行と確認

では、作成したスクリプトを実際に動かしてみましょう!

① ゲームを実行

では、設定が完了したので ゲームを実行 してみましょう!

  1. Unityエディターの 再生ボタン(▶) をクリック
  2. シーンビューまたはゲームビューでオブジェクトの状態を確認

② キー入力で切り替えを試す

次に、キーボードの 左右キー(← →) を押して、オブジェクトが切り替わるか試してみましょう!

  • (右キー)を押すと
    • CubeSphereCylinderCube(ループする)
  • (左キー)を押すと
    • CylinderSphereCubeCylinder(逆順でループ)

動作チェックポイント キーを押すとオブジェクトが順番に切り替わる
キーを押すとオブジェクトが逆順に切り替わる
✅ 画面に 1つのオブジェクト だけが表示される(他は非表示になっている)

これで、switch 文を使ったオブジェクトの切り替えが正しく動作することを確認できました! 🎉


③ よくあるエラーと対処法

もし正しく動作しない場合は、以下をチェックしてみてください。

🔍 スクリプトの設定ミス

  • CubeSphereCylinder のスロットが 空になっていないか 確認
  • もし空なら、もう一度ドラッグ&ドロップする

🔍 オブジェクトのアクティブ設定

  • 最初の状態で、すべてのオブジェクトが アクティブ(表示) になっていないか確認
  • ゲーム開始時に Cube のみ true、他は false にする

🔍 キー入力の確認

  • UnityエディターGame ウィンドウがアクティブになっているか確認
  • 他のウィンドウを選択していると、キー入力が反応しないことがある

④ 応用のヒント

このスクリプトを発展させて、もっと複雑な切り替えを作ることもできます!

応用アイデア

  • オブジェクトの種類を増やす(例:4つ以上のオブジェクトを切り替える)
  • アニメーションを追加(フェードイン・フェードアウトを加えて滑らかに切り替え)
  • ボタン操作でも切り替え可能にする(UIボタンを使ってオブジェクトを変更)

いろいろなアイデアを試して、自分のゲームに活用してみてください! 🚀




よくある質問(FAQ)

Q
3つ以上のオブジェクトを切り替えたい場合はどうすればいいですか?
A

count の範囲を 1~3 ではなく 1~任意の数 に変更し、新しいオブジェクトを追加して switch 文に条件を追加すればOKです。

Q
switch 文ではなく if 文でも同じことはできますか?
A

できますが、switch 文のほうが可読性が高く、コードがスッキリします。

Q
ゲームオブジェクトが多くなると switch 文が長くなりませんか?
A

List<GameObject> を使えば、オブジェクトを配列管理でき、よりシンプルに記述できます。

タイトルとURLをコピーしました