ExecuteAlways
класс в UnityEngine
Выполнено в:UnityEngine.CoreModule
Описание
Заставляет класс, производный от MonoBehaviour, выполняться не только во время работы приложения, но и в режиме редактирования, а также в режиме редактирования префаба.
По умолчанию, MonoBehaviour функции событий только во время выполнения. ExecuteAlways к классу, производному от MonoBehaviour, приводит к тому, что функции событий любого экземпляра этого класса выполняются также в режиме Edit и в режиме префаба.
Этот атрибут нацелен на классы, но влияет только на классы, наследующие от MonoBehaviour.
Используйте [ExecuteAlways] атрибут, когда вы хотите, чтобы ваш скрипт выполнял действия или отвечал на события во время создания, которые не обязательно связаны с тем, что происходит во время выполнения приложения в режиме воспроизведения редактора или автономного проигрывателя. Иногда функциональность такого скрипта во время выполнения идентична его функциональности в режиме редактирования, в то время как в других случаях они сильно отличаются.
Важно убедиться, что скрипт MonoBehaviour, использующий этот атрибут, не содержит кода исполнения, который мог бы неправильно выполнить и модифицировать родительский GameObject, пока он редактируется в режиме редактирования или префаб. Чтобы избежать этого, вы можете поместить ваш код исполнения внутрь условного блока, который выполняется только если Application.IsPlaying является true для собственного родителя скрипта GameObject, как показано в следующем примере кода.
Если ваш скрипт использует статические переменные или паттерн Singleton, позаботьтесь о том, чтобы экземпляры скрипта из игрового мира и экземпляры вне его случайно не влияли друг на друга через эти переменные или одиночки.
В режиме редактирования функции событий вызываются не так часто и не при тех же условиях, что и во время выполнения. Функции событий вызываются при следующих условиях:
- Awake вызывается только при создании нового экземпляра компонента скрипта. Это происходит, когда Unity загружает сцену, содержащую компонент, или при создании нового компонента в Редакторе, например, через меню Компонент.
- Update вызывается при каждом перерисовывании представления Scene или представления Game. Это происходит, когда что-то в сцене меняется, например, позиция GameObject или когда вы перемещаетесь по сцене с помощью мыши или клавиш.
- OnGUI вызывается, когда представление Game получает не только для Редактора Event, которое оно не использует и не пересылает в систему клавиатурных сочетаний Редактора. Например,
OnGUIвызывается при получении экземпляра EventType.ScrollWheel, который не пересылается в EventType.KeyDown или EventType.KeyUp. События, пересылаемые в представление Game, добавляются в очередь и не гарантируется их немедленная обработка. - OnRenderObject и другие функции обратного вызова рендеринга вызываются при каждом перерисовывании представления Scene или представления Game.
См. также: Application.IsPlaying, runInEditMode, EditorApplication.QueuePlayerLoopUpdate.
using UnityEngine;
[ExecuteAlways] public class ExampleClass : MonoBehaviour { void Start() { if (Application.IsPlaying(gameObject)) { // Play logic } else { // Editor logic } } }