Menu
CoddyTech

OnEnable と OnDisable

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

OnEnable()は、スクリプトがアクティブになるたびに実行されます。オブジェクトが最初に表示されたとき(Awake()の直後)と、SetActive(true)でオブジェクトを表示するたび、またはenabled = trueでスクリプトを再び有効にするたびです。OnDisable()は、オブジェクトを非表示にするたび、スクリプトを無効にするたび、またはオブジェクトが破棄されるたびに実行されます。

別のスクリプトがSetActiveで開閉するポータルは、自身の状態を記録できます。

void OnEnable()
{
    Debug.Log("Portal open");
}

void OnDisable()
{
    Debug.Log("Portal closed");
}

シーンの開始時に、ポータルはPortal openを記録します。ポータルを非表示にして再び表示すると、Portal closed、続いてPortal openが記録されますが、Awake()とStart()は2回目には実行されません。そのため、タイマーのリセットや訪問回数のカウントなど、表示されるたびに実行する必要があるコードはOnEnable()に記述します。ポータルが非表示の間は、そのUpdate()は実行されません。そのため、開閉は別のオブジェクトにあるスクリプトで行います。

challenge icon

チャレンジ

中級

Switchable 스크립트는 Player와 그 방패인 Bubble에 있으며, Bubble은 처음에 숨겨져 있습니다. Player에서 target은 Bubble이고, Space 키를 누르면 Bubble이 켜지고 꺼집니다. 이 부분은 작성되어 있습니다.

각 Switchable이 자기 상태를 보고하도록 만드세요.

  • 켜질 때마다 count에 1을 더하고, 대괄호 안에 이름, on, count를 기록합니다. 예: Bubble on (2);
  • 꺼질 때마다 이름과 off를 기록합니다: Bubble off.

ゲーム開始時、Player は Player on (1) を記録します。Player もオンになるためです。Play を押し、Space を数回押してから、Check を押してください。

自分で試してみよう

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        if (target != null && Input.GetKeyDown(KeyCode.Space))
        {
            target.SetActive(!target.activeSelf);
        }
    }

    // このオブジェクトがオンになるたびに、回数を数えて "<name> on (<count>)" をログに記録する
    // オフになるたびに、"<name> off" をログに記録する
}
quiz icon腕試し

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

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