在Unity3d
中,您拥有MonoBehaviour
类,这是所有脚本的正常基类。实现脚本时,必须实现Awake()
或Start()
或Update()
等方法。
但是,这些方法未在virtual
类中实现为abstract
或MonoBehaviour
,因此可以轻松地override
这些方法;实际上它们根本没有实施。一个人在片刻写的方法是一个新的方法,而这个方法是事先没有的。
为什么这些方法未在基类(virtual
)中实现为abstract
或MonoBehaviour
?
答案 0 :(得分:7)
如果您查看文档,您会看到所有这些'功能'列在'消息'部分; MonoBehaviour Doc。
这意味着'功能' (比如,Start,OnEnable或Awake),它们不是作为方法实现的,而是作为消息实现的。
现在,MonoBehaviour继承自Behaviour,继承自Component的SendMessage方法。该方法基本上调用消息/方法,如果消息/方法存在,则可以选择报告错误。名称消息/方法的参数是一个字符串,因此它们在那里使用反射。
似乎Unity在幕后确定是否实施了这些消息以查看是否必须调用它们。根据这个UnityAnswer:
Unity主要用c ++编写,因此大多数魔法都发生在 本机代码。在您的脚本之后,Unity使用反射来确定 已被编译,那些"事件"你已经实施了 记住这个课程。 Unity仅调用Update / LateUpdate / OnGUI何时实施。
所以,简短的回答是,他们不是真实的'您必须覆盖的方法,它们是仅在实现时才被调用的消息。