UnityUnityメモ

Unityで簡単!複数オブジェクトを一括表示・非表示にする方法

Unity

はじめに

Unityで複数のオブジェクトを一括で管理する方法を知っていますか?
たとえば、ゲーム内で「スタートボタン」を押すと特定のオブジェクト群をまとめて表示したり、非表示にしたりするような機能を作りたい場合、親子オブジェクトの仕組みを使うととても便利です。

この記事では、 3つのCubeオブジェクトを親オブジェクトを通して一括で表示・非表示に切り替える方法 を、初心者向けに分かりやすく解説します!
スクリプトも簡単で、Unityの基本操作を学びながらすぐに試せる内容です。

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



手順1: シーンのセットアップ

まずはUnityでシーンをセットアップしましょう。3つのCubeオブジェクトを作成し、親オブジェクトにまとめる手順を説明します。


1. Cubeを3つ作成する

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 3D Object」→「Cube」を選択してCubeを作成します。
  3. 同じ手順で、もう2つCubeを作成してください。
  4. 作成した3つのCubeの名前を分かりやすいように、それぞれ「Cube1」「Cube2」「Cube3」に変更します。

2. 親オブジェクト(CubeParent)を作成する

  1. 再びヒエラルキーウィンドウで右クリックします。
  2. Create Empty」を選択して空のオブジェクトを作成します。
  3. 作成したオブジェクトの名前を「CubeParent」に変更します。

3. CubeをCubeParentの子オブジェクトに設定する

  1. ヒエラルキーウィンドウで「Cube1」「Cube2」「Cube3」をすべて選択します。
    • 複数選択するには、Ctrl(またはCommand)キーを押しながらクリックします。
  2. 選択したCubeを「CubeParent」にドラッグ&ドロップします。
  3. ヒエラルキー上で、CubeParentの下に3つのCubeが配置され、親子関係が設定されます。

4. 位置とスケールを調整する(任意)

  • Cubeが重ならないように、インスペクターウィンドウで**Position(位置)**を変更します。
    • 例:
      • Cube1: X = -1, Y = 0, Z = 0
      • Cube2: X = 0, Y = 0, Z = 0
      • Cube3: X = 1, Y = 0, Z = 0

これで、シーンのセットアップは完了です!次のステップでは、これらのオブジェクトを制御するスクリプトを作成していきますよ! 🎮



手順2: スクリプトの作成

次に、Unityでオブジェクトの表示・非表示を切り替えるスクリプトを作成していきます。以下の手順に従えば簡単に実装できます!


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

  1. プロジェクトウィンドウで、Scriptsフォルダを作成します(まだ作成していない場合)。
    • プロジェクトウィンドウ内で右クリック → 「Create」→「Folder」を選び、名前を「Scripts」にします。
  2. Scriptsフォルダを開き、右クリック → 「Create」→「C# Script」を選択します。
  3. 新しいスクリプトに「ToggleObjects」と名前を付けてください。

2. コードを記述する

  1. 作成したスクリプトをダブルクリックして開きます(デフォルトではVisual Studioが起動します)。
  2. 以下のコードをスクリプトに貼り付けます。
using UnityEngine;

public class ToggleObjects : MonoBehaviour
{
    public GameObject target; // 操作対象のオブジェクト

    void Start()
    {
        // CubeParentをシーン内から探してtargetに設定
        target = GameObject.Find("CubeParent");
    }

    public void ObjChange()
    {
        // オブジェクトのアクティブ状態を切り替え
        if (target.activeSelf)
        {
            target.SetActive(false); // 非表示
        }
        else
        {
            target.SetActive(true); // 表示
        }
    }
}
  1. コード解説:
    • GameObject.Find("CubeParent"): シーン内から「CubeParent」という名前のオブジェクトを検索して、targetに設定します。
    • target.SetActive(): オブジェクトを表示(true)または非表示(false)にするメソッドです。
    • activeSelf: 現在のオブジェクトの表示状態を取得します。

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

  1. ヒエラルキーウィンドウで「CubeParent」を選択します。
  2. 作成した「ToggleObjects」スクリプトをドラッグ&ドロップして、CubeParentにアタッチします。
  3. インスペクターウィンドウで、CubeParentに「ToggleObjects」スクリプトが追加されているのを確認します。

これでスクリプトの準備は完了です!次の手順では、ボタンを作成してスクリプトと連動させる設定を行います。引き続き進めていきましょう! 😊



手順3: ボタンを設定

スクリプトを使ってオブジェクトを表示・非表示にするには、UIボタンを作成し、スクリプトと連動させる必要があります。以下の手順で設定を行いましょう。


1. UIボタンを作成する

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「UI」→「Button」を選択します。
  2. シーンビューにボタンが表示され、ヒエラルキーに「Button」が追加されます。

2. ボタンの見た目を調整する(任意)

  1. ヒエラルキーで「Button」を選択します。
  2. インスペクターウィンドウで「Rect Transform」セクションのPositionやサイズを変更して、ボタンの位置や大きさを調整します。
    • 例:
      • Position: X = 0, Y = -200 (画面下部に配置)
      • Width: 160, Height: 60
  3. ボタンのテキストを変更するには、ボタンの子オブジェクト「Text」を選択し、インスペクターの「Text」フィールドに「表示/非表示」と入力します。

3. ボタンの動作を設定する

  1. ヒエラルキーで「Button」を選択し、インスペクターウィンドウを確認します。
  2. インスペクターの「On Click ()」セクションに注目します。
    • このセクションで、ボタンをクリックしたときの動作を設定します。
  3. +」ボタンをクリックして、新しいイベントスロットを追加します。
  4. CubeParent」をヒエラルキーからドラッグして、On Clickのスロットにドロップします。
  5. 右側のドロップダウンメニューをクリックし、「ToggleObjects」→「ObjChange()」を選択します。



手順4: 動作確認

ここまで設定が完了したら、実際に動作を確認してみましょう!以下の手順に従って、ボタン操作でオブジェクトが正しく表示・非表示になるかチェックします。


1. Unityエディタでプレイモードを開始

  1. Unityエディタの上部にある「再生ボタン(▶)」をクリックします。
    • シーンがプレイモードに切り替わり、ゲームビューが表示されます。

2. ボタンをクリックして動作確認

  1. ゲームビュー内で、設定したボタンをクリックします。
  2. 以下の動作を確認してください:
    • 初回クリック → CubeParentとその子オブジェクトが非表示になる。
    • もう一度クリック → CubeParentとその子オブジェクトが表示される。

3. トラブルシューティング

もし動作しない場合は、以下の項目を確認してください:

  • スクリプトが正しくアタッチされているか
    • 「CubeParent」に「ToggleObjects」スクリプトがアタッチされているか確認。
  • スクリプト内のオブジェクト参照が正しいか
    • 「GameObject.Find(“CubeParent”)」で正しくCubeParentを取得しているか。
  • ボタンの設定が正しいか
    • 「On Click」セクションにCubeParentを追加し、ObjChange()が選択されているか確認。
  • ヒエラルキー内の名前が一致しているか
    • CubeParentの名前がスクリプトで指定したものと一致しているか確認してください。

4. 動作確認の成功例

  • ボタンをクリックするたびにオブジェクトが表示・非表示に切り替わる。
  • 表示/非表示の切り替えにタイムラグがない。

動作が確認できたらチュートリアルは終了です!
お疲れさまでした!🎉 ここからさらに、ボタンのデザインを変更したり、複数のボタンで異なるオブジェクトを操作する機能を追加してみるのもおすすめです。

ぜひ今回の知識を活かして、ゲーム開発をどんどん楽しんでください! 🚀



よくある質問

Q
子オブジェクトを個別に操作したい場合はどうすればいいですか?
A

子オブジェクトごとにスクリプトを設定し、個別の制御を行うことが可能です。

Q
ボタンを複数作成して異なる動作をさせられますか?
A

はい、それぞれのボタンに異なるオブジェクトや動作を設定できます。

Q
他のUI要素でも同じスクリプトを使用できますか?
A

可能です。例えば、スライダーやトグルを使用してオブジェクトを操作することもできます。