![](/img/trans.png)
[英]Issues with Save/Load System in a Text Based Adventure game made with ScriptableObjects in Unity
[英]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.