gpt4 book ai didi

Unity3d 中的 c# 方法重写

转载 作者:可可西里 更新时间:2023-11-01 03:00:19 24 4
gpt4 key购买 nike

最近几周,我使用 c# 作为脚本语言玩过 Unity3d。我以前从未使用过 c# 或 Unity3d,我正在尝试了解方法重写在 Unity 框架中的工作原理。让我感到奇怪的是,我可以扩展基类 MonoBehavior 并覆盖 Start()Update() 等方法,而无需使用 override 关键字,编译器不会提示它!相反,在“普通”C# 程序中,我必须使用 override 关键字,否则我会收到编译器警告。例如:

public class BaseClass {
public virtual void MyMethod () {
Console.WriteLine("BaseClass.MyMethod()");
}
}

public class SubClass : BaseClass {
public override void MyMethod () {
Console.WriteLine("SubClass.MyMethod()");
}
}

class Program {
static void Main () {
SubClass obj = new SubClass ();
obj.MyMethod ();
}
}

而不是在 Unity 中,我可以简单地做:

class PlayerController : MonoBehaviour {
void Update () {
// code...
}
}

幕后发生了什么? unity 是利用“动态技巧”还是什么?

最佳答案

因为MonoBehavior 没有Update 的定义。运行时检查是否存在名为 Update 的方法(使用反射),如果存在则调用它,但您并未覆盖基础实现

更新

既然你问了一个关于这是如何可能的例子,我在这里做了一个例子:https://dotnetfiddle.net/UrpYkf

关于Unity3d 中的 c# 方法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38048642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com