UnityUnityメモ

Unityスクリプト解説: SetActiveを使ったオブジェクトの表示切り替え

Unity

はじめに

Unityを使ってゲームやアプリを作っていると、「ボタンをクリックしたら画面に表示される」「特定のアイテムをクリックすると消える」といった動きを実現したいことがよくありますよね。このような「オブジェクトの表示・非表示を切り替える」機能は、インタラクティブなコンテンツを作る上でとても役立ちます。

この記事では、初心者でも簡単に実装できる方法を解説します!具体的なスクリプト例やUnityでの設定手順を詳しく紹介するので、一緒にチャレンジしてみましょう。初めてUnityを使う方はコチラの記事から見てみてください!

「Destroy」との違い

ここでよく「Destroy」と混同されがちなので簡単に違いを説明します。

  • 非表示にする(SetActive(false))
    オブジェクトは残っていますが、画面上で見えなくなります。コードで再度「SetActive(true)」にすれば表示が復活します。
  • Destroy
    オブジェクトを完全に削除します。一度削除すると、コードを使っても復活させることはできません。

つまり、非表示は一時的に隠すだけで、オブジェクトを使い続けたい場合に便利です。この違いを覚えておくと、プロジェクトの最適化やバグ防止に役立ちます!



1. Unityでオブジェクトを配置する

まずは、クリックで表示・非表示を切り替えたいオブジェクトをUnityのヒエラルキーウィンドウに配置しましょう。ここでは、3Dオブジェクトの「Cube(キューブ)」を例に解説します。


手順

  1. ヒエラルキーウィンドウを開く
    Unityエディターの左側にある「ヒエラルキー」ウィンドウを確認してください。このウィンドウには、現在のシーンに配置されているオブジェクトが一覧で表示されています。
  2. 右クリックでオブジェクトを作成
    ヒエラルキーウィンドウの中で右クリックし、表示されたメニューから次のように選択します:
    「3D Object」→「Cube」
    これで、シーン内にキューブが作成されます。
  3. オブジェクトの位置を調整する
    作成されたキューブがシーンビューに表示されます。以下のように位置を調整しましょう:
    • ヒエラルキーウィンドウで「Cube」をクリックして選択します。
    • インスペクターウィンドウで「Transform」コンポーネントを確認します。
    • 「Position」の値を (0, 0, 0) に設定して、シーンの中央に配置します。
  4. 名前を付ける(オプション)
    キューブの名前をわかりやすくするために変更しておくと便利です。ヒエラルキーウィンドウで「Cube」を右クリックして**「Rename」**を選択し、たとえば「MyCube」に名前を変更します。

ポイント

  • オブジェクトの種類を選べます
    「Cube」以外にも「Sphere(球)」や「Capsule(カプセル)」など、さまざまな3Dオブジェクトを作成可能です。
  • シーンビューで確認
    ヒエラルキーにオブジェクトを配置すると、自動的にシーンビューに反映されます。視点を動かして配置したオブジェクトを確認してください。



2. 表示・非表示を切り替えるスクリプトを作成する

次に、Unityでオブジェクトの表示・非表示を切り替えるスクリプトを作成しましょう。初めての方でも安心できる手順で説明します!

ステップ1: スクリプトの作成

  1. プロジェクトウィンドウを右クリックして「Create」→「C# Script」を選びます。
  2. 新しいスクリプトに名前を付けます(例: ToggleVisibility)。
    • ポイント: 名前は英語にするのが一般的です。後でスクリプトを探しやすくなります!

ステップ2: スクリプトにコードを記述する

作成したスクリプトをダブルクリックして開き、以下のコードを入力します。

using UnityEngine;

public class ToggleVisibility : MonoBehaviour
{
    // オブジェクトが表示されているかどうかを管理するフラグ
    private bool isVisible = true;

    void Update()
    {
        // マウスの左クリックを検出
        if (Input.GetMouseButtonDown(0))
        {
            // フラグを反転
            isVisible = !isVisible;

            // ゲームオブジェクトの表示・非表示を切り替える
            gameObject.SetActive(isVisible);
        }
    }
}

コードの説明

  • using UnityEngine;
    Unityの基本機能を使うための記述です。消さないでください。
  • private bool isVisible = true;
    オブジェクトの現在の表示状態を管理する変数です。
  • Update()
    ゲーム実行中に毎フレーム呼び出される関数です。ここにクリック検出と表示・非表示の切り替え処理を書いています。
  • Input.GetMouseButtonDown(0)
    マウスの左クリックを検出します。数字「0」は左クリックを意味します。
  • gameObject.SetActive(isVisible);
    オブジェクトの表示状態を切り替えるUnityの関数です。

ステップ3: スクリプトを保存する

入力が完了したら、スクリプトを保存します(Ctrl + S または Command + S)。
保存しないと変更が反映されないので注意してください!

これでスクリプトが完成しました!次は、このスクリプトをUnity内でオブジェクトに適用する方法を解説します。



3. スクリプトを適用する

作成したスクリプトを実際にUnity内のオブジェクトに適用していきます。この手順では、スクリプトを「キューブ」オブジェクトにアタッチし、動作を確認します。


手順:スクリプトをオブジェクトに適用する

  1. スクリプトを確認する
    • プロジェクトウィンドウに作成したスクリプトが表示されているか確認してください(例:ToggleVisibility.cs)。
  2. スクリプトをアタッチする
    • ヒエラルキーウィンドウで表示・非表示を切り替えたいオブジェクト(例:Cube)をクリックします。
    • プロジェクトウィンドウから、作成したスクリプトをドラッグして、Cubeオブジェクトにドロップします。
    ポイント
    スクリプトをアタッチした後、インスペクターウィンドウでスクリプトが正しく追加されているか確認しましょう。



4.テストプレイ

  1. ゲームを再生する
    • Unityエディターの上部にある「再生ボタン」をクリックして、ゲームを実行します。
  2. 動作を確認する
    • ゲームウィンドウ上でキューブをクリックしてみてください。キューブが表示・非表示を切り替えることを確認できるはずです。

注意点

  • オブジェクトにスクリプトをアタッチし忘れないように注意してください!
    スクリプトがアタッチされていないと動作しません。
  • キューブの位置やカメラの設定を確認
    キューブがカメラに映らない位置にあると、非表示・表示が切り替わっても見えません。適切な位置に配置してください。

これでスクリプトの適用が完了です!再生を止める場合は、再度「再生ボタン」をクリックしてください。次は、この機能を応用して他のオブジェクトにも適用してみましょう!



まとめ

今回は、Unityでクリックするたびにオブジェクトの表示・非表示を切り替える方法を解説しました。この手法はシンプルですが、ゲーム制作やアプリ開発でとても役立つ機能です。

手順をおさらいすると:

  1. オブジェクトを配置する – ヒエラルキーウィンドウで簡単に配置できます。
  2. スクリプトを作成する – 表示・非表示を切り替えるコードを記述します。
  3. スクリプトを適用する – 作成したスクリプトをオブジェクトにアタッチすれば完成です!

初心者でも取り組みやすい内容なので、ぜひUnityで試してみてください。また、この方法を応用して、ゲーム内のボタンやメニューの操作など、幅広いシーンで活用できます。

次のステップとして、他のスクリプト機能やUnityの使い方も学びながら、自分だけのオリジナルな作品を作ってみてください!



よくある質問

Q
複数のオブジェクトで同じスクリプトを使えますか?
A

はい、同じスクリプトを複数のオブジェクトにアタッチすることで、同じ機能を簡単に適用できます。

Q
2Dオブジェクトにも同じスクリプトを使えますか?
A

はい、2Dオブジェクトにも同じスクリプトを使えます。ただし、2Dオブジェクトの場合はコライダー(Collider)が必要です。

Q
クリック以外の方法で表示・非表示を切り替えるには?
A

ボタンを使ったり、キーボード入力で切り替えたりすることもできます。スクリプトのOnMouseDown()メソッドを他のイベントに変更するだけです。