【发布时间】:2018-02-11 02:19:46
【问题描述】:
从 Unity 3D 获取此示例代码
public class Enemy : MonoBehaviour
{
void Start()
{
}
void Update()
{
transform.postion = Vector3.Lerp(transform.position, new Vector3(0, 1, 0), 5f * Time.deltaTime);
}
}
如您所见,Enemy 类继承自 MonoBehavior,其中包含 Start 和 Update 方法。我所要做的就是把我自己的代码放在那里,但是,我想知道如何创建一个类似的东西,例如在 Java 中构建一个聊天 API,我会将它布置给消费者以访问我的基类,并且会有一个像“更新”这样的函数,每秒执行一次,而无需手动编写 while 循环。
如何创建一个子类声明时可以自动调用的基类函数?我对任何人都可以回答的任何编程语言持开放态度,我只想知道这背后的逻辑。
【问题讨论】:
-
这对于 Stack Overflow 来说太宽泛了。 Unity 内部使用(很可能无法验证)反射以确定是否声明了
Start和其他方法。不过,c# 中没有任何内置功能可以让您执行此操作。 -
不存在仅通过声明即可调用的方法。就像没有汽车这样的东西会因为它被制造出来而被驱动。在调用方法之前,它永远不会执行任何操作。
-
@ScottHannen 是的,我了解您,先生,我认为它在运行时被 Unity 调用。把它想象成 JApplet,draw() 方法每帧调用一次。我想知道的是进程名称,所以我可以研究它。老实说,这就像我在编程中没有做过的事情之一。
-
@CamiloTerevinto 明白了!
-
你可以使用多态性。这就是 XNA 的做法。 Unity 选择了清单样式系统。在编译时,MonoBehaviour 脚本会扫描特定的方法,然后以某种方式用实现的方法标记它们。那里没有反射。