[英]Text-Based Adventure Without Using “States” - C# Unity
我目前正在學習C#和Unity3D游戲引擎。 我正在學習在線課程“ 通過制作視頻游戲來學習編碼 ”,並且到目前為止還很喜歡。 但是,我正在進行第二個項目(進行“基於文本的”冒險),並且我覺得如果您想要十幾個“房間”或動作,那么講師制作游戲的方式將無法很好地擴展。 我希望有人可以為正確的方向指明我的方向,使之更靈活一些?
這是他目前正在為我們做的工作的簡化版本:
private enum States {state_1, state_2, state_3, etc...}
private States myState;
void Start () {
//Starts the game in 'state_1'
myState = States.state_1;
}
void Update () {
//constantly checking what state we are in, and then runs the correct function
if(myState == States.state_1) {
state_1();
}
if(myState == States.state_2) {
state_2();
}
if(myState == States.state_3) {
state_3();
}
//etc...
}
//Starting screen/display first series of options
void state_1() {
//display text and control options for my first 'state'
}
//Possible action or option
void state_2() {
//display text and control options for my another 'state'
}
//Another possible action or option
void state_3() {
//display text and control options for my another 'state'
}
//etc...
盡管這確實可以正常工作,但我覺得這是一個非常笨拙的系統,僅在十幾個狀態后就變得不規則,因為我必須回去為每個新狀態添加條件語句。 有沒有辦法在void Update函數中真正簡單地“檢查狀態並轉到該狀態”命令,而不是列出每個可能的狀態?
就像我說的那樣,我對C#還是陌生的(完成了一些PHP,HTML,CSS的工作,但沒有C#這么殘酷),所以我不確定這是否是我可以做的。
謝謝!
狀態機實際上是最常見的游戲開發機制之一,很難找到一種能更有效地組織游戲邏輯的方法。 話雖這么說,您不應該使用一系列的if語句來檢查當前處於活動狀態的狀態,因為您絕對正確-該方法根本無法很好地擴展。
顯而易見的替代方法是使用一個switch塊,但是雖然它比if系列要高效得多,但是它並不能解決整個代碼的可維護性問題。
那么,下一個解決方案是使用委托。
public delegate void StateHandler();
private StateHandler CurrentState;
void Start()
{
CurrentState = StartingState;
}
void Update()
{
CurrentState();
}
void StartingState()
{
// do something
CurrentState = State1;
}
void State1()
{
// do something
if (somethingHappens)
CurrentState = State2;
else
CurrentState = State3;
}
void State2()
{
// do something
CurrentState = State1;
}
void State3()
{
// etc
}
etc...
我敢肯定,無論如何,這都是您的教程系列所要達到的目標,因此,最好在詢問此類問題之前完成本系列。 呈現這樣的示例是教程中的常見策略,然后在下一課中“現在您已經了解了原理,讓我們以不完全廢話的方式來實現它”。
嗯, TL; DR:這實際上取決於您要為游戲提供哪些特定功能。
大多數游戲引擎/框架教程的重點是使您熟悉其API和功能的基礎。
因此,在游戲教程書/視頻中很難找到諸如數據驅動設計或使用設計模式之類的概念!
您可以在以下鏈接中找到一些不錯的資源來開始探索該路徑:
我特別喜歡最后一個,即使我用另一種語言編寫代碼,也確實對我有幫助! 除非您正在快速開發原型作為概念驗證,否則習慣良好實踐將使您免於積累工程債務,從而使您不得不長期重構整個游戲!
在確定特定模式之前,請花一些時間來准確定義您想要從“房間”獲得哪些特定功能,並注意示波器的變化!
您可能還需要一個小型數據庫,該數據庫很適合“狀態”。 資產商店中有一個Google Sheets資產可以幫助您設置文本室,可以輕松地對其進行編輯,並根據需要進行復制。 我還沒有玩過,但是有很多很棒的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.