iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0

昨天分享了我們的狀態機框架,接下來是實做的玩家角色的控制和移動部分。

首先是靜態配置和動態參數,包括攻擊、位移、翻滾的配置,以及運行時狀態的參數,如行動意圖、移動請求等。

圖片

玩家狀態實做,包括玩家能做的閒置、攻擊、翻滾、移動、投擲等行為都有一個專屬狀態。狀態會根據配置和動態參數,再把計算結果寫回另一個動態參數,但本身不「執行」攻擊傷害輸出或移動。

圖片

例如在 Run 和 Doge State 的 Tick 中,狀態只會把移動請求寫入 MovementRuntime 中的參數,但並不會實際執行物件在世界中的 Transform Position 的移動行為。

圖片

實際的動作我擊我交給 Addon ,讓一個 RigidbodyMover Addon 讀取動態參數中的移動請求後,再傳遞給 Unity Rigidbody 執行移動。

圖片

玩家輸入則透過一個轉換器,把輸入資訊轉換成狀態機參數中的「行為意圖」,代表狀態機決策大腦大腦下達的指令。原本是獨立的轉換器,後來也把它改成 Addon 了。

圖片

轉換條件實做,讀取配置和動態參數判斷條件是否符合。包括檢查是否進入移動狀態、是否有翻滾意圖、是否有攻擊意圖和當前狀態是否結束等。

圖片

最後用一個 Builder 模式組裝出整個狀態機!傳入需要的 Config、建立動態參數、設置狀態與轉換條件、掛上需要的 Addon,然後就組裝出我們需要的角色狀態機了。

圖片

這個狀態機是完全模組化的,要擴展或替換某部分都很容易,而雖然現在是用程式組裝,但只要寫個轉換器就能用 ScriptableObject 或其他純資料格式組裝。

狀態機運作就交給一個 MonoBehavior 的 Driver 執行,可以選擇要在 Update 還是 FixedUpdate 調用 Tick 更新。

圖片

至於運做起來的樣子就等下篇,跟狀態機除錯一起講 :P


上一篇
Day4 - 狀態機框架(80% AI)
下一篇
Day6 - 狀態機除錯(90% AI)
系列文
用 Vibe Coding 協助開發畢專遊戲原型7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言