【发布时间】:2016-10-29 03:41:22
【问题描述】:
在最近几周,我使用 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是使用“动态技巧”还是什么?
【问题讨论】:
-
我认为这是某种反射——当然是“智能”反射——正常会导致性能问题。
-
我想你的答案可以在这里找到answers.unity3d.com/questions/177245/…