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() не выполняется, поэтому открытие и закрытие выполняет скрипт на другом объекте.
Задание
СреднеСкрипт 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"
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом4Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона10Жизненный цикл скрипта
Awake и StartUpdate и LateUpdateOnEnable и OnDisableПорядок вызовов жизненного циклаПовторение: регистратор жизненного цикла2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света