UnityUnityメモ

Unityで簡単!ボタンを押すたびにPrefabを順番に切り替える方法

Unity

1. はじめに

Unityでゲームを作るとき、ゲーム内で見た目や機能を切り替える仕組みを実装したいことがありますよね。たとえば、キャラクターのスキンを変更したり、武器を切り替えたりする場面です。本記事では、その基礎となる「ボタンを押すたびにPrefab(プレハブ)を順番に切り替えて表示する方法」を解説します。

今回のゴールは、ボタンをクリックするたびに現在のPrefabを削除し、新しいPrefabを生成するスクリプトを作成することです。この仕組みを使えば、簡単な切り替え機能を実現できるので、Unity初心者の方にもおすすめです。

まずは、表示させるPrefabとして3つの異なるCubeを作成します。それぞれ異なる色やサイズにすることで、切り替えを視覚的に確認しやすくします。その後、Prefabを切り替えるためのスクリプトを作成し、UIボタンと連携させる方法を学びます。

初心者の方でも迷わず進められるように、わかりやすく手順を説明していきますので、一緒にチャレンジしてみましょう!

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



2. CubeのPrefabを準備しよう

この記事では、Prefabを準備するところから始めます。Prefabとは、Unityでオブジェクトを効率的に管理し再利用するための仕組みです。まずは、3つの異なるCubeを作成して、それぞれPrefabに変換していきましょう!

1. Cubeを作成する

まずは3DオブジェクトのCubeを作成します。以下の手順で進めてください。

  1. ヒエラルキーウィンドウを右クリック
    Unityのヒエラルキーウィンドウ(Hierarchy)で右クリックします。
  2. 「3D Object」→「Cube」を選択
    メニューが表示されたら「3D Object」を選び、その中の「Cube」をクリックします。
  3. Cubeがシーンに作成される
    シーンビューにCubeが表示されます。これが切り替えに使用するオブジェクトの元になります。

2. Cubeのカスタマイズ

次に、Cubeに違いをつけてわかりやすくします。それぞれ色やサイズを変更してみましょう。

  1. サイズの変更
    ヒエラルキーウィンドウでCubeを選択し、インスペクターウィンドウの「Transform」セクションから「Scale」を調整します。例:
    • Cube 1: サイズ (1, 1, 1)
    • Cube 2: サイズ (2, 2, 2)
    • Cube 3: サイズ (0.5, 0.5, 0.5)
  2. 色の変更
    ヒエラルキーウィンドウでCubeを選択し、インスペクターウィンドウの「Material」を設定します。
    • 新しいMaterialを作成(プロジェクトウィンドウで右クリック→「Create」→「Material」)。
    • Materialの色を設定(Inspectorで「Albedo」を変更)。
    • 作成したMaterialをCubeにドラッグ&ドロップします。

例として、以下のように設定してみてください:

  • Cube 1: 赤 (Red)
  • Cube 2: 緑 (Green)
  • Cube 3: 青 (Blue)

3. CubeをPrefabにする

それぞれのCubeをPrefabにして再利用できるようにします。

  1. プロジェクトウィンドウにCubeをドラッグ&ドロップ
    ヒエラルキーウィンドウから作成したCubeをプロジェクトウィンドウにドラッグします。
  2. Prefabの保存
    ドロップしたCubeは、自動的にPrefabとして保存されます。名前をわかりやすく変更しましょう:
    • Cube 1: RedCube
    • Cube 2: GreenCube
    • Cube 3: BlueCube
  3. ヒエラルキーのCubeを削除
    Prefab化が完了したら、ヒエラルキーウィンドウに残っているCubeを削除します(Deleteキーを押します)。

これで、3つのPrefabが完成しました!次のステップでは、これらのPrefabを切り替えるスクリプトを作成していきます。お楽しみに!



3. Prefabを切り替えるスクリプトを作成

ここでは、ボタンを押すたびにPrefabを順番に切り替えるスクリプトを作成します。このスクリプトを使えば、簡単にPrefabを表示・切り替えることができます。

スクリプトを作成する手順

  1. スクリプトを作成する
    • プロジェクトウィンドウで右クリックし、「Create」→「C# Script」を選択します。
    • スクリプトに名前を付けます。今回は「PrefabSwitcher」とします。
  2. スクリプトを開いてコードを記述
    • 作成した「PrefabSwitcher」スクリプトをダブルクリックして開き、以下のコードを貼り付けてください。
using UnityEngine;

public class PrefabSwitcher : MonoBehaviour
{
    public GameObject[] prefabs; // 切り替えたいPrefabを格納する配列
    private int currentIndex = 0; // 現在のPrefabのインデックス
    private GameObject currentPrefabInstance; // 現在のPrefabのインスタンス

    public void SwitchPrefab()
    {
        // 現在のPrefabが存在していれば削除
        if (currentPrefabInstance != null)
        {
            Destroy(currentPrefabInstance);
        }

        // 次のPrefabを生成
        currentPrefabInstance = Instantiate(prefabs[currentIndex], Vector3.zero, Quaternion.identity);

        // インデックスを更新して次のPrefabを指定
        currentIndex = (currentIndex + 1) % prefabs.Length;
    }
}

コードの解説

  • public GameObject[] prefabs
    3つのPrefabを格納するための配列です。インスペクターから設定できるようにpublicとして宣言しています。
  • private int currentIndex
    現在表示しているPrefabの位置を示す変数です。これを使って順番に切り替えます。
  • private GameObject currentPrefabInstance
    現在シーンに表示されているPrefabのインスタンスを保持します。これを使って、前のPrefabを削除します。
  • SwitchPrefab()メソッド
    ボタンを押したときに呼び出され、次の処理を行います:
    1. 現在のPrefabが表示されていれば削除する。
    2. 配列内の次のPrefabを生成し、シーンに表示する。
    3. インデックスを次に進め、配列の長さを超えた場合は最初に戻る(循環させる)。

このスクリプトを使用すれば、ボタンを押すたびにPrefabが順番に切り替わります。次は、このスクリプトをボタンに結びつけて動作させる方法を解説します!



4. ボタンとスクリプトを結びつける

ここでは、作成したスクリプトをボタンと連携させて、ボタンを押すたびにPrefabが切り替わる仕組みを実装します。以下の手順で進めましょう。


1. UIボタンを作成する

まず、ボタンを画面に配置します。

  1. ヒエラルキーウィンドウで右クリックし、
    UI」→「Button」を選択します。
    自動的に「Canvas」と「Button」が作成されます。
  2. 作成されたボタンをわかりやすい名前に変更します(例:「SwitchButton」)。
  3. ボタンの見た目を変更したい場合は、「SwitchButton」を選択し、インスペクターの「Text」部分を編集します(例:「切り替え」など)。

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

次に、「PrefabSwitcher」スクリプトを適切なオブジェクトにアタッチします。

  1. ヒエラルキーで、スクリプトをアタッチしたいオブジェクトを選択します(例:「Main Camera」)。
    ※オブジェクトは何でもOKですが、整理のため「Main Camera」にするのが簡単です。
  2. プロジェクトウィンドウで「PrefabSwitcher」スクリプトを探し、それを選択したオブジェクトにドラッグ&ドロップします。
  3. インスペクターで、「PrefabSwitcher」スクリプトがアタッチされていることを確認します。

3. Prefabを登録する

スクリプトが正しく動作するように、表示するPrefabをスクリプトに登録します。

  1. 「PrefabSwitcher」スクリプトをアタッチしたオブジェクトを選択します。
  2. インスペクター内の「Prefabs」と書かれたフィールドに注目してください。
  3. Prefabフィールドの右側にある「サイズ」の値を「3」に設定します。
    →これにより、Prefabを3つ登録するスペースが作られます。
  4. プロジェクトウィンドウから、それぞれのPrefab(例:「RedCube」「GreenCube」「BlueCube」)を順番にドラッグ&ドロップして登録します。

4. ボタンに機能を割り当てる

最後に、ボタンを押すとスクリプトの「SwitchPrefab()」関数が実行されるよう設定します。

  1. 「SwitchButton」を選択し、インスペクターの「On Click()」セクションを見つけます。
  2. 「On Click()」セクションの「+」ボタンをクリックして、新しい項目を追加します。
  3. 「PrefabSwitcher」スクリプトをアタッチしたオブジェクト(例:「Main Camera」)を、空欄にドラッグ&ドロップします。
  4. ドロップダウンメニューから「PrefabSwitcher」→「SwitchPrefab()」を選択します。

これで、ボタンを使ってPrefabを切り替える設定が完了です!次は、ゲームを実行して動作確認をしてみましょう!



5. 実行と動作確認

いよいよ完成したプロジェクトを実行して、ボタンを押すたびにPrefabが順番に切り替わる仕組みを確認してみましょう!以下の手順に沿って実行し、動作をテストしてください。


1. ゲームを再生

Unityエディター上部にある「再生ボタン(三角形のアイコン)」をクリックして、ゲームを開始します。


2. ボタンをクリック

  • シーンビューまたはゲームビューに表示されているボタンをクリックします。
  • 初めに登録したPrefab(例:RedCube)が生成されます。

3. 次のPrefabへの切り替えを確認

  • ボタンを再度クリックすると、現在のPrefabが削除され、次のPrefab(例:GreenCube)が生成されます。
  • 再度クリックするとさらに次のPrefab(例:BlueCube)が生成されます。

3つのPrefabが順番に切り替わり、すべて切り替わった後は最初のPrefabに戻る仕組みになっています。


4. 動作確認のポイント

動作中に以下の点を確認してください:

  • ボタンを押すたびにPrefabが正しく切り替わっているか
  • 各Prefabが意図した場所(Vector3.zero)に生成されているか
  • 切り替え速度がスムーズであるか

5. エラーが発生した場合

もし、Prefabが切り替わらなかったり、ボタンが動作しない場合は以下をチェックしてください:

  1. Prefabの登録を確認
    • PrefabSwitcherスクリプトの「Prefabs」配列に、3つのPrefabが正しく登録されているか確認します。
  2. ボタンの設定を確認
    • ボタンの「On Click()」リストに、PrefabSwitcherをアタッチしたオブジェクトが正しく追加されているか確認します。
    • 関数リストで「SwitchPrefab()」が選択されているか確認します。
  3. エラーメッセージを確認
    • Unityコンソールにエラーメッセージが表示されている場合、その内容を確認し修正します。

すべてが正常に動作すれば、Prefabが順番に切り替わる仕組みが完成です!この仕組みは、ゲーム中のキャラクター選択やアイテム切り替えなど、さまざまな場面で応用できます。

「もっと工夫したい」「アニメーションを追加したい」など、次のステップに挑戦してみるのもおすすめです!



6. まとめ

この記事では、Unityでボタンを押すたびにPrefabを順番に切り替える方法を解説しました。以下のステップを通じて、初心者でも簡単に実装できる手順を紹介しました:


  1. CubeのPrefabを作成
    異なる色やサイズの3つのCubeを準備し、Prefab化しました。
  2. Prefabを切り替えるスクリプトを作成
    「PrefabSwitcher」というスクリプトを作成し、配列でPrefabを管理する方法を学びました。
  3. ボタンとスクリプトを結びつける
    UIボタンを作成し、スクリプトと連携させることで、ボタンを押すたびにPrefabが切り替わる動作を実現しました。

これらを実行することで、ボタンを押すだけで簡単にオブジェクトを切り替えるシステムが作れたはずです!

この仕組みは、ゲーム内のキャラクター選択画面やアイテム表示、その他の切り替え機能に応用することができます。たとえば、背景を変更する、スキンを選ぶ、といった場面でも役立つでしょう。

次のステップとして、Prefabを切り替える際にアニメーションや音を追加したり、より複雑な切り替え条件を設定したりすると、さらに魅力的なシステムが作れるようになります。Unityには多くの機能が用意されていますので、ぜひ色々と試してみてください!

何か困ったことがあれば「よくある質問(Q&A)」のセクションを参考にしてください。それでも解決しない場合は、Unityの公式ドキュメントやフォーラムを活用するのも良い方法です。

楽しいUnityライフを!



よくある質問

Q
Prefabが正しく切り替わらない場合、どうすればいいですか?
A

以下のポイントを確認してください。

  • Prefabの配列が空ではないか
    「PrefabSwitcher」スクリプトをアタッチしたオブジェクトのインスペクターウィンドウで、prefabs 配列に正しいPrefabが登録されているか確認してください。Prefabをドラッグ&ドロップで登録しましょう。
  • スクリプトにエラーがないか
    スクリプトを保存した後、Unityの「Console」ウィンドウを確認してエラーが表示されていないかチェックしてください。
  • Prefabの生成位置が見えない場所になっていないか
    Instantiate(prefabs[currentIndex], Vector3.zero, Quaternion.identity)Vector3.zero が原因でPrefabがカメラに映らない位置に生成されている可能性があります。適切な位置に調整してください。
Q
ボタンを押しても動作しないのはなぜですか?
A

以下を確認してみてください。

  • ボタンの「On Click()」設定が正しいか
    ボタンのインスペクターウィンドウで、「On Click()」イベントに「PrefabSwitcher」スクリプトをアタッチしたオブジェクトが登録されているか確認してください。さらに、リストから「PrefabSwitcher → SwitchPrefab()」が正しく選択されているか確認してください。
  • Canvasが正しく配置されているか
    ボタンが含まれているCanvasが無効(Disabled)になっていないか、またはカメラに映る位置に配置されているか確認してください。
  • EventSystemがシーンに存在しているか
    UnityでUIが動作するには、「EventSystem」がシーン内に必要です。ヒエラルキーに存在しない場合は、手動で追加してください(右クリック →「UI」→「EventSystem」)。
Q
他のPrefabや異なる種類のオブジェクトにも応用するには?
A

この仕組みは、Prefabの種類や数を変えるだけで簡単に応用可能です。

  • Prefabの種類を増やす
    配列に新しいPrefabを追加するだけで、切り替えるオブジェクトを増やせます。配列のサイズは自動的に調整されるので、自由に追加してください。
  • 異なる位置や回転で生成する
    Instantiate(prefabs[currentIndex], Vector3.zero, Quaternion.identity)Vector3.zeroQuaternion.identity を、生成したい位置や回転に変更することで、さまざまな演出が可能です。

おすすめのアセット

「UI Kit Pro – Kawaii」は、かわいいデザインのUIパーツを揃えた2D GUIアセットです。このアセットは、ポップでカラフルなビジュアルを求めるゲームやアプリに最適で、初心者にも使いやすいのが特徴です。ボタン、アイコン、スライダー、ダイアログボックスなど、さまざまなUI要素が含まれており、特にカジュアルゲームや子ども向けのアプリに向いています。