表示と非表示
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()を呼び出されませんが、オブジェクトはシーンに残り、描画も衝突も続き、ほかのコンポーネントも動作し続けます。
チャレンジ
中級Space キーで橋を隠したり、再び表示したりしましょう。
Update()内で、Input.GetKeyDown(KeyCode.Space)のときにbridge.SetActive(...)を呼び出し、コライダーも含めて橋全体を切り替えます。- 現在の状態と反対の値を渡します:
bridge.SetActive(!bridge.activeSelf);。
「プレイ」を押して、Space キーを数回押してみましょう。橋が消えて、再び表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class BridgeSwitch : MonoBehaviour
{
public GameObject bridge;
void Update()
{
// Spaceを押すと橋が非表示になり、もう一度押すと再び表示される
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド