在 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;
    }
}