簡體   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