我正在Unity(C#)中进行游戏。我创建了一个继承自 GameEvent 的基类Shape和其他七个类( FinishStage , InfoOnStart 等)。
GameEvent:
id
FinishStage:
public class GameEvent : MonoBehaviour {
protected virtual void Start () {}
public void ResetFields()
{....
Reset()
}
protected virtual void Reset(){}
}
InfoOnStart:
public class FinishStage : GameEvent {
void OnTriggerEnter(Collider other){
ResetFields();
}
protected override void Reset()
{
base.Reset();
Restart();
}
protected void Restart()
{
//restart the game
}
}
现在是要抓住的地方。 在场景中,我有1个 InfoOnStart 实例和1个 FinishStage 实例。
启动时, InfoOnStart 运行ResetFields()。 因为它没有自己的ResetFields()和Reser(),所以我希望它运行其父级的ResetFields()并从那里运行 GameEvent .Reset()。
但是由于某些原因, GameEvent .ResetFields()继续运行 FinishStage .Reset()并因此重新加载了整个场景。
我设法通过编写
来解决它public class InfoOnStart : GameEvent {
protected override void Start () {
base.Start();
ResetFields();
}
/*
protected override void Reset()
{
base.Reset();
}
*/
}
在 InfoOnStart 中运行,然后运行 GameEvent 的重置。
但是为什么会这样呢? 为什么父级( GameEvent )不能运行自己的功能,而兄弟级( FinishStage )上却运行它的功能呢?
答案 0 :(得分:1)
因为重写会从基类“替换”方法。如果您还希望调用基本方法,则必须通过重写方法中的base.Reset();
对其进行显式显示