在Unity 4.6中的文本冒险中遇到状态更改问题

时间:2016-10-21 20:32:35

标签: c# unity3d monodevelop

基本上,当玩家点击按钮时,我正试图让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没有阅读或回应按键

任何帮助将不胜感激。而且你需要的信息比我提供的更多,告诉我,我会把它给你。

提前致谢。

1 个答案:

答案 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;
    }
}