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

ExecuteInEditMode

класс в UnityEngine

Выполнено в:UnityEngine.CoreModule

Описание

Заставляет класс, производный от MonoBehaviour, выполняться не только во время работы приложения, но и в режиме редактирования.

По умолчанию, MonoBehaviour функции событий только во время выполнения. ExecuteInEditMode к классу, производному от MonoBehaviour, приводит к тому, что функции событий любого экземпляра этого класса выполняются также в режиме Edit.

Этот атрибут нацелен на классы, но влияет только на классы, наследующие от MonoBehaviour.

Этот атрибут не рекомендуется, поскольку он не совместим с редактированием в режиме редактирования префаб. Рекомендуемой альтернативой является ExecuteAlways.

Если вы редактируете префаб, содержащий MonoBehaviour с ExecuteInEditMode атрибут в режиме редактирования префаб и затем вы переходите в режим воспроизведения, Unity выходит из режима редактирования префаб, чтобы предотвратить случайное изменение префаб, вызванное логикой, предназначенной только для режима воспроизведения.

Чтобы сохранить режим редактирования префаб открытым в режиме воспроизведения, используйте ExecuteAlways Если вы делаете это, вы должны позаботиться о том, чтобы ваш код исполнения MonoBehaviour не модифицировал код префаб, который вы редактируете, таким образом, чтобы это происходило только во время игры. ExecuteAlways.

В режиме редактирования функции событий вызываются не так часто и не при тех же условиях, что и во время выполнения. Функции событий вызываются при следующих условиях:

  • Awake вызывается только при создании нового экземпляра компонента скрипта. Это происходит, когда Unity загружает сцену, содержащую компонент, или при создании нового компонента в Редакторе, например, через меню Компонент.
  • Update вызывается при каждом перерисовывании представления Scene или представления Game. Это происходит, когда что-то в сцене меняется, например, позиция GameObject или когда вы перемещаетесь по сцене с помощью мыши или клавиш.
  • OnGUI вызывается, когда представление Game получает не только для Редактора Event, которое оно не использует и не пересылает в систему клавиатурных сочетаний Редактора. Например, OnGUI вызывается при получении экземпляра EventType.ScrollWheel, который не пересылается в EventType.KeyDown или EventType.KeyUp. События, пересылаемые в представление Game, добавляются в очередь и не гарантируется их немедленная обработка.
  • OnRenderObject и другие функции обратного вызова рендеринга вызываются при каждом перерисовывании представления Scene или представления Game.

См. также: ExecuteAlways, Application.IsPlaying, runInEditMode, EditorApplication.QueuePlayerLoopUpdate.

// The PrintAwake script is placed on a GameObject. Usually, the Awake function is
// called when the GameObject with this script is initialized at runtime. Due to the ExecuteInEditMode
// attribute, the Editor also calls Awake when the script component is created via an Editor menu or when a scene that contains it is loaded.
// The Update function is called when the Scene view needs to render, which happens when something in the scene changes or you navigate the scene with mouse or keyboard inputs.

using UnityEngine;

[ExecuteInEditMode] public class PrintAwake : MonoBehaviour { void Awake() { Debug.Log("Editor causes this Awake"); }

void Update() { Debug.Log("Editor causes this Update"); } }