Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

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