Unity 私有唤醒更新和启动方法如何工作?

Dav*_*rey 7 c# design-patterns unity-game-engine

Unity如何在后台调用Awake、Update和Start方法?对我来说,它们没有访问修饰符表明它们是私有方法,并且它们不使用 new 或 override 之类的东西,那么 Unity 框架如何找到调用它们的方法呢?

在一个相关问题上,没有使用虚拟方法有什么特殊原因吗?

编辑:对于那些不熟悉 Unity 脚本的人来说,它们通常是这样显示的:

public class MyClass : MonoBehaviour{
   void Start(){
   }

   void Awake(){
   }

   void Update(){
   }
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是,框架如何找到并自动调用每个脚本的这些方法,而从表面上看,它们看起来只是私有方法

Hel*_*ium 3

这是Unity 博客文章中的一条信息

\n\n
\n

如何调用更新

\n\n

不,Unity 不会在每次需要调用某个方法时使用 System.Reflection 来查找魔术方法。

\n\n

相反,第一次访问给定类型的 MonoBehaviour 时,会通过脚本运行时(Mono 或 IL2CPP)检查底层脚本是否定义了任何魔术方法,并缓存了此信息。如果 MonoBehaviour 具有特定方法,则会将其添加到适当的列表中,例如,如果脚本定义了 Update 方法,则会将其添加到需要每帧更新的脚本列表中。

\n\n

在游戏过程中,Unity 只是迭代这些列表并执行 \xe2\x80\x94 中的方法,就这么简单。另外,这就是为什么您的 Update 方法是公共还是私有的\xe2\x80\x99 并不重要。

\n
\n