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

时间:2015-09-12 10:56:01

标签: c# unity3d

Unity3d中,您拥有MonoBehaviour类,这是所有脚本的正常基类。实现脚本时,必须实现Awake()Start()Update()等方法。

但是,这些方法未在virtual类中实现为abstractMonoBehaviour,因此可以轻松地override这些方法;实际上它们根本没有实施。一个人在片刻写的方法是一个新的方法,而这个方法是事先没有的。

为什么这些方法未在基​​类(virtual)中实现为abstractMonoBehaviour

1 个答案:

答案 0 :(得分:7)

如果您查看文档,您会看到所有这些'功能'列在'消息'部分; MonoBehaviour Doc

这意味着'功能' (比如,Start,OnEnable或Awake),它们不是作为方法实现的,而是作为消息实现的。

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

似乎Unity在幕后确定是否实施了这些消息以查看是否必须调用它们。根据这个UnityAnswer

  

Unity主要用c ++编写,因此大多数魔法都发生在   本机代码。在您的脚本之后,Unity使用反射来确定   已被编译,那些"事件"你已经实施了   记住这个课程。 Unity仅调用Update / LateUpdate /   OnGUI何时实施。

所以,简短的回答是,他们不是真实的'您必须覆盖的方法,它们是仅在实现时才被调用的消息。