Menu
CoddyTech

表示と非表示

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 34/67。

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

チャレンジ

中級

Lever のスクリプトは、bridge フィールドに Bridge を保持します。Space キーで橋を切り替えられるようにします。最初の押下で橋が隠れ、次の押下で再び表示されます。このように、押すたびに切り替わります。

コライダーも含めて橋全体を隠し、存在しない橋の上に誰も立てないようにします。

Play を押し、Space キーを数回押してから、Check を押します。

自分で試してみよう

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

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

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン