基本上,当玩家点击按钮时,我正试图让Unity改变游戏的状态。无论出于何种原因,它并没有读取实际改变状态的第二次按键。代码如下所示:
void state_Cell () {
if (CelP == 0) {
text.text = "Some text";
if (Input.GetKeyDown (KeyCode.C)) { //This works
++CelP;
text.text = "Some more text.";
if (Input.GetKeyDown (KeyCode.B)) { //This doesn't work
++CelP;
MyState = States.Bed;
}
}
}
}
如果有帮助,这是我在游戏中无法访问的Bed状态代码:
void state_Bed () {
if (BedP == 0) {
text.text = "Still more text.";
if (Input.GetKeyDown (KeyCode.D)) {
MyState = States.Delivery;
BedP++
}
}
}
对我来说最令人困惑的部分是Unity的编译器没有给我任何错误。我以前遇到过这个问题的状态不同,而我所做的就是将“++ Variable”移到另一个位置,但这对于这个语句不起作用。
除此之外,我还尝试删除Bed状态中的“if语句”,但这也不起作用。
我尝试的另一件事是将“KeyCode”中的“B”改为不同的键,但这根本不起作用。
我还尝试包含“print();”在Bed状态开始时的声明,但它也没有触发。
我尝试过的最后一件事是“打印();” “(KeyCode.B))”之后的语句,但这也不起作用。因此,我知道,问题是 Unity没有阅读或回应按键。
任何帮助将不胜感激。而且你需要的信息比我提供的更多,告诉我,我会把它给你。
提前致谢。
答案 0 :(得分:0)
你应该为Cell创建两个状态,第一个监听C并将状态更改为第二个,第二个监听B并将状态更改为Bed。
原因是状态机在一个状态内的代码中间离开之后不会跟随。在定义状态时,需要更加具体。
我假设正在从每个x帧调用的Update或类似的Coroutine调用state_Cell。因此,每次调用state_Cell时,都会重置局部变量。所以机器不知道用户以前是按过C还是没有按任何东西。
当用户按下某个键时,从技术上讲,状态已经改变。当用户按下另一个键时,再次声明更改。
如果您不想添加额外状态,则这是state_Cell
的简化版本在将额外布尔设置为false时必须小心。
bool c_pressed = false;
void state_Cell () {
if (c_pressed || Input.GetKeyDown (KeyCode.C)) {
c_pressed = true;
if (Input.GetKeyDown (KeyCode.B)) {
c_pressed = false;
MyState = States.Bed;
}
}
else
c_pressed = false;
}
}