使 MonoBehaviour 派生类除了在运行时之外还在编辑模式下执行。
默认情况下,MonoBehaviour 事件函数仅在运行时执行。将 ExecuteInEditMode
应用于 MonoBehaviour 派生类会导致该类任何实例的事件函数也在编辑模式下执行。
此属性以类为目标,但它只对从 MonoBehaviour 继承的类有效。
不建议使用此属性,因为它与在预制件编辑模式下编辑不兼容。推荐的替代方法是 ExecuteAlways。
如果在预制件编辑模式下编辑包含具有 ExecuteInEditMode
属性的 MonoBehaviour 的预制件,然后进入播放模式,Unity 会退出预制件编辑模式,以防止因专为播放模式设计的逻辑而意外修改预制件。
要保持在播放模式下打开预制件编辑模式,请改用 ExecuteAlways 属性。如果这样做,您必须注意确保您的运行时 MonoBehaviour 代码不会以仅在游戏过程中发生的预期方式修改您正在编辑的预制件。有关更多详细信息,请参阅 ExecuteAlways。
在编辑模式下,事件函数不会像在运行时那样频繁地调用,也不会在所有相同条件下调用。事件函数在以下情况下被调用
OnGUI
被调用。转发给 **游戏** 视图的事件将被添加到队列中,并且不保证立即被处理。另请参阅: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"); } }