C# Unity3D:交换子类实例(状态模式)
我创建了以下三个脚本来测试Unity3D中的状态模式(我是Unity的新手),得到了意想不到的结果: 基态C# Unity3D:交换子类实例(状态模式),c#,oop,unity3d,state,C#,Oop,Unity3d,State,我创建了以下三个脚本来测试Unity3D中的状态模式(我是Unity的新手),得到了意想不到的结果: 基态 public class BaseState { public void Enter() { Debug.Log("Entered BaseState"); } } 内向 public class IntroState : BaseState { public void Enter() { Debug.Log("En
public class BaseState {
public void Enter()
{
Debug.Log("Entered BaseState");
}
}
内向
public class IntroState : BaseState {
public void Enter()
{
Debug.Log("Entered IntroState");
}
}
状态控制器
public class StateController : MonoBehavior {
private BaseState state;
void Start()
{
state = new IntroState();
state.Enter();
}
}
当我将其附加到游戏对象时,我希望在控制台中看到“进入内部状态”。相反,我看到的是“进入BaseState”
我做错了什么?在子类中使用相同的签名定义方法时,您是在“隐藏”方法。
您应该标记BaseState。将
输入为public void virtual
并在IntroState中添加override
。输入
使其成为public override void Enter()
发生的情况是,您有一个state
变量,其类型为BaseState
。当您编写state=newintrostate()时代码>您正在进行隐式向上转换(谷歌向上搜索)。在此之后,对BaseState
对象调用Enter
方法,这就是为什么会得到“Entered BaseState”
我还建议您查看一个名为“无状态”的库以及这个答案,以获取更多信息