Unity3D:void OnEnable() 在编辑器模式下被不可预测地调用

Unity3D: void OnEnable() is called Unpredictably in Editor Mode

我实现了 OnEnable() 并且总是按预期在播放模式下调用它。但在编辑器模式下,一些组件会调用 OnEnable() 而其他组件不会

我需要在编辑器模式下调用 OnEnable() 或其他方法来设置组件,以便能够对其进行原型制作。

如果我从 UnityEngine.UI.Image 扩展 class,则在编辑器模式下调用 OnEnable()。如果我从 MonoBehavior 扩展 class,那么它不会在编辑器模式下调用 OnEnable(),但仍会在播放模式下被调用。

是否有任何说明为什么调用或不调用它。

MonoBehaviour.OnEnable() is called when the script component is actived. UnityEngine.UI.Image inherits from MonoBehaviour, so there should be no difference. You may need to have a look at Execution Order of Event Functions

如果您希望编辑器调用您的 MonoBehaviour,您应该将 ExecuteInEditMode 属性添加到您的 class。

Thanks. May be UI.Image has that flag

完全正确!

UI.Image 继承自 MaskableGraphic.

MaskableGraphic 继承自 Graphic.

GraphicExecuteInEditMode 标志 !


ps1: @zwcloud 关于ExecuteInEditMode 属性是对的!,这个答案是我的两分钱。

ps2;你总是可以 class 的 Go the declaration 并检查代码,这可能会很有趣!