Menu
CoddyTech

OnEnable и OnDisable

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

challenge icon

Задание

Средне

Скрипт Switchable находится на Player и на его щите — Bubble, который изначально скрыт. На Player значение target — это Bubble, а клавиша Space включает и выключает Bubble; эта часть уже написана.

Сделай так, чтобы каждый объект Switchable сообщал о себе:

  • каждый раз при включении увеличивай счёт на 1 и выводи в журнал его имя, on и значение счёта в скобках, например Bubble on (2);
  • каждый раз при выключении выводи в журнал его имя и off: Bubble off.

При запуске игры Player выводит в журнал Player on (1): он тоже включается. Нажми Играть, несколько раз нажми Space, затем нажми Проверить.

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

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