我创建了以下三个脚本来测试Unity3D中的状态模式(我是Unity的新手)并得到了意想不到的结果:
BaseState
public class BaseState {
public void Enter()
{
Debug.Log("Entered BaseState");
}
}
IntroState
public class IntroState : BaseState {
public void Enter()
{
Debug.Log("Entered IntroState");
}
}
StateController
public class StateController : MonoBehavior {
private BaseState state;
void Start()
{
state = new IntroState();
state.Enter();
}
}
当我将它附加到GameObject时,我希望看到"进入IntroState"在控制台中。相反,我看到"进入BaseState"。
我做错了什么?
答案 0 :(得分:1)
你是"隐藏"在子类中使用相同签名定义它时的方法。
您应将BaseState.Enter
标记为public void virtual
并在override
中添加IntroState.Enter
,使其变为public override void Enter()
发生的事情是您拥有state
类型的BaseState
变量。当您编写state = new IntroState();
时,您正在进行隐式上传(谷歌搜索)。之后,您在Enter
对象上调用了BaseState
方法,这就是为什么你得到"进入BaseState"
我还建议您查看名为" Stateless"的图书馆。以及更多信息的答案