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
.
Graphic
有 ExecuteInEditMode
标志 !
ps1: @zwcloud 关于ExecuteInEditMode 属性是对的!,这个答案是我的两分钱。
ps2;你总是可以 class 的 Go the declaration
并检查代码,这可能会很有趣!
我实现了 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
.
Graphic
有 ExecuteInEditMode
标志 !
ps1: @zwcloud 关于ExecuteInEditMode 属性是对的!,这个答案是我的两分钱。
ps2;你总是可以 class 的 Go the declaration
并检查代码,这可能会很有趣!