In Unity3d
你有MonoBehaviour
class,这是所有脚本的正常基类。实现脚本时,必须实现以下方法Awake()
or Start()
or Update()
.
然而,这些方法并没有实现为virtual
or abstract
in the MonoBehaviour
类,以便人们可以轻松地override
他们;事实上,它们根本没有得到实施。此刻写的方法是类之前没有的新方法。
为什么这些方法没有实现为virtual
or abstract
在基类中(MonoBehaviour
)?
如果您检查文档,您会发现所有这些“功能”都列在“消息”部分中;MonoBehavior文档.
因此,这意味着“功能”(如 Start、OnEnable 或 Awake),它们不是作为方法实现的,而是作为消息实现的。
现在,MonoBehaviour继承自行为,它继承自成分其中有发信息方法。该方法基本上调用消息/方法,并且可以选择在消息/方法存在与否时报告错误。名称消息/方法的参数是一个字符串,/~~所以他们在那里使用反射.~~/ 检查更新!!
似乎 Unity 在幕后确定这些消息是否已实现,以查看是否必须调用它们。根据这个统一解答:
Unity 主要是用 C++ 编写的,因此大多数魔法都发生在
本机代码。 Unity 使用反射来确定,在您的脚本之后
已编译,您已实施哪些“事件”以及
记住这一点。 Unity只调用Update/LateUpdate/
OnGUI 当它已经实现时。
因此,简短的答案是,它们不是您必须重写的“真正”方法,它们是仅在实现时才会调用的消息。
Update;
正如 @Raining 指出的,我在 Unity 获取要调用的消息的方式上是错误的。
Unity 不使用反射来执行此操作。
根据这个1k 更新调用(也由@Rainin 提供)检查脚本以检查它们是否包含某些“神奇方法”。如果是这样,它们将被添加到将相应执行的列表中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)