为什么MonoBehaviour方法没有实现覆盖?

Her*_*ton 7 c# unity-game-engine

Unity3d你的MonoBehaviour类,它是所有脚本正常的基类.在实现脚本时,必须实现诸如Awake()Start()或等方法Update().

然而,这些方法不作为virtualabstractMonoBehaviour类这样就可以轻松地override他们.实际上它们根本没有实施.在Moment写的方法是一个新的方法,该类没有事先.

为什么这些方法不作为virtualabstract基类(MonoBehaviour)?

may*_*ayo 7

如果您查看文档,您将看到"消息"部分中列出了所有这些"功能"; MonoBehaviour Doc.

这意味着'函数'(如,Start,OnEnable或Awake),它们不是作为方法实现的,而是作为消息实现的.

现在,MonoBehaviour继承自Behavior,它继承自具有SendMessage方法的Component.该方法基本上调用消息/方法,如果消息/方法存在,则可以选择报告错误.名称message/method的参数是一个字符串,因此它们在那里使用反射.

看起来像Unity在幕后确定是否实现了这些消息,看它是否必须调用它们.据UnityAnswer说:

Unity主要用c ++编写,因此大多数魔法都发生在本机代码中.在编译脚本之后,Unity使用反射来确定您已实现的那些"事件",并记住该类的内容.Unity仅在实现时调用Update/LateUpdate/OnGUI.

因此,简短的回答是,它们不是您必须覆盖的"真实"方法,它们是仅在实现时才被调用的消息.