Menu
CoddyTech

OnEnable и OnDisable

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 72 из 85.

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() второй раз не выполняются. Поэтому код, который должен выполняться при каждом появлении, например сброс таймера или подсчёт посещений, размещают в OnEnable(). Пока портал скрыт, его Update() не выполняется, поэтому открытие и закрытие выполняет скрипт на другом объекте.

challenge icon

Задание

Средне

Пусть каждый Switchable сообщает, когда его включают и выключают.

  1. Добавь поле int count; и void OnEnable(): увеличь count на 1, затем выведи в журнал name + " on (" + count + ")", например Bubble on (2).
  2. Добавь void OnDisable(), который выводит в журнал name + " off".

Нажми «Играть» и нажми пробел: в консоли появится Player on (1), затем Bubble on (1) и Bubble off. Затем нажми «Проверить».

Попробуйте сами

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"
}

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity