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() не выполняется, поэтому открытие и закрытие выполняет скрипт на другом объекте.
Задание
СреднеПусть каждый Switchable сообщает, когда его включают и выключают.
- Добавь поле
int count;иvoid OnEnable(): увеличьcountна 1, затем выведи в журналname + " on (" + count + ")", напримерBubble on (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
1Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель света3Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт6Трансформации и иерархия
Родители и детиПоднять флагМасштабСмотреть на объектыДвигаться к точкеПовторение: Луна на орбите12Жизненный цикл скрипта
Awake и StartUpdate и LateUpdateOnEnable и OnDisableПорядок вызовов жизненного циклаПовторение: логгер жизненного циклаПотренируйтесь самостоятельно: Песочница Unity