bas*_*his 5 c# unity-game-engine
我只在Unity3D中有一点经验,但我注意到派生的类MonoBehaviour可能包含具有预定义签名的函数,这些函数将以特殊方式调用.例如,如果我写:
void Update()
{
//some code
}
Run Code Online (Sandbox Code Playgroud)
每个帧都会调用此方法.
我想在Unity内部存在某种无限循环,它Update为场景中的每个对象调用每帧的方法.但是它如何知道对象实际上提供了Update方法实现呢?很明显,如果Update是MonoBehaviour类中方法的覆盖,但是通过语法(以及您可以使用任何访问修饰符实现此类方法的事实)来判断它不是.那里有一些反思魔法吗?
http://blogs.unity3d.com/2015/12/23/1k-update-calls/
不,Unity每次需要调用时都不会使用System.Reflection来查找魔术方法.
相反,第一次访问给定类型的MonoBehaviour时,底层脚本将通过脚本运行时(Mono或IL2CPP)进行检查,无论它是否定义了任何魔术方法,并且此信息都被缓存.如果MonoBehaviour具有特定方法,则会将其添加到正确的列表中,例如,如果脚本定义了Update方法,则会将其添加到需要每帧更新的脚本列表中.
在游戏中,Unity只是遍历这些列表并从中执行方法 - 这很简单.此外,这就是为什么Update方法是公共的还是私有的并不重要.
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |