UnityEditor之属性1

ExecuteInEditMode

关键点

  • 默认情况下,仅在播放模式下执行 MonoBehaviours。通过添加此属性,MonoBehaviour 的任何实例都将在编辑器处于编辑模式时执行其回调函数。

  • 此属性正在逐步被淘汰,因为它不考虑预制件模式。如果在预制件模式下编辑一个带有 MonoBehaviour 并启用了此属性的预制件,然后进入播放模式,则编辑器将退出预制件模式,以防止由仅用于播放模式的逻辑引起的预制件意外修改。

  • 要使 MonoBehaviour 正确考虑了预制件模式并且在播放模式期间以预制件模式打开是安全的,可以使用属性 ExecuteAlways 取代此处的属性。


事件周期

  • Update仅当场景中的某些内容发生更改时才调用
  • Awake仅在实例化脚本时调用
  • OnGUI is called when the Game View receives a non-editor-only
  • Event that it does not use (e.g., EventType.ScrollWheel) and does not forward to the Editor’s keyboard shortcut system (e.g., EventType.KeyDown, EventType.KeyUp).
  • Events forwarded to the Game View are enqueued and are not guaranteed to be processed immediately. OnRenderObject and the other rendering callback functions are called on every repaint of the Scene View or Game View.

ExecuteAlways

关键点

  • 使脚本的实例在播放模式期间以及编辑时始终执行。

  • 默认情况下,MonoBehaviours 仅在播放模式下并且仅当它们位于包含用户场景的主阶段中的游戏对象上时才执行。它们不会在编辑模式下执行,也不在预制件模式下编辑的对象上执行,即使此时在播放模式下也是如此。通过添加此属性,MonoBehaviour 的任何实例都将始终执行其回调函数。

  • 使用此属性的 MonoBehaviour 必须确保它们在编辑模式下或者在对象不是游戏世界的一部分时不会运行可能导致对象被错误修改的播放逻辑。为达到此目的,可以使用 Application.IsPlaying,在其中,脚本可以传入自己的游戏对象以检查它是否是游戏世界的一部分。


Application.IsPlaying (Object obj)

  • 在编辑器中,如果编辑器处于播放模式,并且提供的对象是游戏世界的一部分,而不是(例如)处于预制件模式的对象的一部分,则返回 true。

MonoBehaviour.runInEditMode

  • 允许 MonoBehaviour 的特定实例在编辑模式下运行(仅可在 Editor 中使用)。

EditorWindow.autoRepaintOnSceneChange

  • 窗口是否会在场景每次发生变化时自动重绘

EditorApplication.QueuePlayerLoopUpdate


InitializeOnLoad

  • 允许您在加载 Unity 以及重新编译脚本时初始化 Editor 类。
  • 在 InitializeOnLoad 方法中应避免进行资产加载等资产操作。 在资产导入完成之前调用 InitializeOnLoad 方法,因此资产加载可能会失败,从而导致空对象。 要在需要资产操作的域重新加载后进行初始化,请使用 AssetPostprocessor.OnPostProcessAllAssets 回调。 此回调支持所有资产操作,并且如果有域重新加载,则具有参数信号。

InitializeOnLoadMethod

  • 允许在 Unity 加载时初始化编辑器类方法,而无需用户采取任何操作。

猜你喜欢

转载自blog.csdn.net/a_codecat/article/details/128074779