gpt4 book ai didi

c# - Unity 如何执行它的方法?

转载 作者:太空狗 更新时间:2023-10-29 22:36:30 25 4
gpt4 key购买 nike

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

void Update()
{
//some code
}

此方法将在每一帧调用。

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

最佳答案

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

No, Unity doesn’t use System.Reflection to find a magic method every time it needs to call one.

Instead, the first time a MonoBehaviour of a given type is accessed the underlying script is inspected through scripting runtime (either Mono or IL2CPP) whether it has any magic methods defined and this information is cached. If a MonoBehaviour has a specific method it is added to a proper list, for example if a script has Update method defined it is added to a list of scripts which need to be updated every frame.

During the game Unity just iterates through these lists and executes methods from it — that simple. Also, this is why it doesn’t matter if your Update method is public or private.

关于c# - Unity 如何执行它的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010701/

25 4 0
文章推荐: c# - 试图理解静态构造函数
文章推荐: java - 如何使用 Maven Enforcer 插件?
文章推荐: java - java中的引用和对象有什么区别?
文章推荐: c# - 使用 HttpClient 时避免从异步函数返回类型 Task