在 Unity 4.6 的文本冒险中遇到状态更改问题
Having issues with State changes in a Text Adventure in Unity 4.6
基本上,我试图让 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;
}
}
}
}
如果有帮助,这是我无法在游戏中访问的床状态代码:
void state_Bed () {
if (BedP == 0) {
text.text = "Still more text.";
if (Input.GetKeyDown (KeyCode.D)) {
MyState = States.Delivery;
BedP++
}
}
}
最让我困惑的是 Unity 的编译器没有给我任何错误。我之前在不同的状态下遇到过这个问题,我所做的是将“++Variable”移动到不同的位置,但是这对这个语句不起作用。
除此之外,我还尝试删除 Bed 状态下的 "if statement",但这也没有用。
我尝试的另一件事是将 "KeyCode" 中的 "B" 更改为不同的键,但这根本不起作用。
我也尝试在 Bed 状态的最开始包含一个 "print();" 语句,但它也没有触发。
我尝试过的最后一件事是在“(KeyCode.B))”之后放置一个 "print();" 语句,但这也不起作用。因此,我 知道 问题是 Unity 没有读取或响应按键 。
如有任何帮助,我们将不胜感激。如果您需要的信息比我提供的更多,请告诉我,我会给您。
提前致谢。
您应该为 Cell 创建两个状态,第一个监听 C 并将状态更改为第二个,第二个监听 B 并将状态更改为 Bed。
原因是状态机不会跟随它们在一个状态中的代码中间离开的位置。定义状态时需要更具体。
我假设 state_Cell 是从 Update 或类似的协程调用的,它每 x 帧调用一次。所以每次调用 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;
}
}
基本上,我试图让 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;
}
}
}
}
如果有帮助,这是我无法在游戏中访问的床状态代码:
void state_Bed () {
if (BedP == 0) {
text.text = "Still more text.";
if (Input.GetKeyDown (KeyCode.D)) {
MyState = States.Delivery;
BedP++
}
}
}
最让我困惑的是 Unity 的编译器没有给我任何错误。我之前在不同的状态下遇到过这个问题,我所做的是将“++Variable”移动到不同的位置,但是这对这个语句不起作用。
除此之外,我还尝试删除 Bed 状态下的 "if statement",但这也没有用。
我尝试的另一件事是将 "KeyCode" 中的 "B" 更改为不同的键,但这根本不起作用。
我也尝试在 Bed 状态的最开始包含一个 "print();" 语句,但它也没有触发。
我尝试过的最后一件事是在“(KeyCode.B))”之后放置一个 "print();" 语句,但这也不起作用。因此,我 知道 问题是 Unity 没有读取或响应按键 。
如有任何帮助,我们将不胜感激。如果您需要的信息比我提供的更多,请告诉我,我会给您。
提前致谢。
您应该为 Cell 创建两个状态,第一个监听 C 并将状态更改为第二个,第二个监听 B 并将状态更改为 Bed。
原因是状态机不会跟随它们在一个状态中的代码中间离开的位置。定义状态时需要更具体。
我假设 state_Cell 是从 Update 或类似的协程调用的,它每 x 帧调用一次。所以每次调用 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;
}
}