Menu
CoddyTech

表示と非表示

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 48/85。

SetActive(false)はGameObject全体をオフにします。描画されなくなり、衝突しなくなり、その上のスクリプトはUpdate()を実行しなくなり、子オブジェクトも一緒にオフになります。SetActive(true)ですべて元に戻り、activeSelfでオンかどうかを確認できます。ボタンに付けたこのスクリプトは、マウスクリック時にdoorフィールドのドアを非表示にします。

public GameObject door;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        door.SetActive(false);
    }
}

gameObject.SetActive(false)で自身のオブジェクトを非表示にするスクリプトは、自分でそれを元に戻すことはできません。Update()がもう実行されないからです。そのため、切り替えスイッチは別のオブジェクトに置き、表示・非表示を切り替えるオブジェクトへの参照を持たせます。

enabledは1つのコンポーネントだけをオフにし、オブジェクトのほかの部分には影響しません。GetComponent<Renderer>().enabled = falseにするとオブジェクトは見えなくなりますが、コライダーは物体を遮り続けます。つまり、見えない壁になります。enabled = falseにしたスクリプトは、以降Update()を呼び出されませんが、オブジェクトはシーンに残り、描画も衝突も続き、ほかのコンポーネントも動作し続けます。

challenge icon

チャレンジ

中級

Space キーで橋を隠したり、再び表示したりしましょう。

  1. Update()内で、Input.GetKeyDown(KeyCode.Space)のときにbridge.SetActive(...)を呼び出し、コライダーも含めて橋全体を切り替えます。
  2. 現在の状態と反対の値を渡します:bridge.SetActive(!bridge.activeSelf);。

「プレイ」を押して、Space キーを数回押してみましょう。橋が消えて、再び表示されます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Spaceを押すと橋が非表示になり、もう一度押すと再び表示される
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド