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)
我不明白的是,框架如何找到并自动调用每个脚本的这些方法,而从表面上看,它们看起来只是私有方法
这是Unity 博客文章中的一条信息
\n\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