Unity 如何执行其方法

本文关键字:方法 执行 何执行 Unity | 更新日期: 2023-09-27 18:31:57

我在Unity3D方面只有一点经验,但我注意到从MonoBehaviour派生的类可能包含具有预定义签名的函数,这些签名将以特殊方式调用。例如,如果我写:

void Update()
{
  //some code
}

此方法将每帧调用一次。

我想在 Unity 内部有某种无限循环,它针对场景中的每个对象的每一帧调用 Update 方法。但是它如何知道对象实际上提供了Update方法实现呢?如果UpdateMonoBehaviour 类中方法的覆盖,那就很清楚了,但从语法(以及您可以使用任何访问修饰符实现此类方法的事实)来看,事实并非如此。那里有什么反射魔法吗?

Unity 如何执行其方法

http://blogs.unity3d.com/2015/12/23/1k-update-calls/

不,Unity 不会每次都使用 System.Reflection 来查找神奇的方法 是时候叫一个了。

相反,第一次访问给定类型的单行为时 通过脚本运行时检查基础脚本(任一 单声道或 IL2CPP)是否定义了任何魔术方法,这 信息被缓存。如果 MonoBehavior 有特定的方法,它是 添加到正确的列表中,例如,如果脚本具有 Update 方法 定义它被添加到需要更新的脚本列表中 每一帧。

在游戏过程中,Unity 只是遍历这些列表并执行 方法——就是这么简单。另外,这就是为什么如果 更新方法为公共或专用。