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