繁体   English   中英

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

如果它有帮助,这是我在游戏中无法访问的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();” 在床状态开始时的声明,但它也没有触发。

我尝试的最后一件事是放一个“print();” “(KeyCode.B))”之后的语句,但这也不起作用。 因此我知道问题在于Unity没有阅读或回应按键

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

提前致谢。

您应该为Cell创建两个状态,第一个侦听C并将状态更改为第二个,第二个侦听B并将状态更改为Bed。

原因是状态机在一个状态内的代码中间离开之后不会跟随。 在定义状态时,您需要更具体。

我假设state_Cell是从Update或类似的Coroutine调用的,每个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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM