ETH官方钱包

前往
大廳
主題 達人專欄

【Godot】待定專案 Top-Down Shooter 開發紀錄 02 (Behavior Tree)

Muryan | 2024-06-10 20:00:10 | 巴幣 2322 | 人氣 605

上一篇提到嘗試 Behavior Tree,經過一個禮拜的努力。
我覺得對它的了解增加了不少。底下一樣是紀錄和感想。

使用素材


上禮拜小試身手後,準備要開始製作遊戲。
我喜歡從外觀去聯想所以我先去找遊戲要用的美術素材
不過還是以簡單能用就好為主,不需要花太多時間。
因此這裡當然還是找我們的好幫手 Kenneyitch.io 出來了。

人物 房子、草地等等 河流、池塘 動物
Tiny Dungeon Tiny Town Tiny Battle Tiny Ranch Asset Pack


Behavior Tree (以下叫行為樹)

首先來一點前情提要。
我建立行為樹使用的插件是 Beehave
基本概念和用法參考的影片是底下這部,後半我會推薦另一篇文章。


我開始一邊參考這個影片,一邊參考Beehave 使用手冊
做出了第一版,牛會閒晃和吃草。


底下是做出來的行為樹結構,看起來很複雜。
李組長眉頭一皺,發覺結構應該有問題。


沒錯,我做完也發現太複雜了。AI 只是執行簡單的閒晃、吃草。
行為樹作為工具應該是把問題變簡單,而不是變得更複雜。
所以我認為一定是哪裡有問題,開始找更多參考資料。

我先找到一個行為樹教學系列
雖然我只看了前面幾回,不過我對於行為樹概念有再多了解一些。
但是對於怎麼做,還是有點抓不到感覺。

最後我找到一篇關鍵文章 Behavior trees for AI: How they work
因為他是舉遊戲裡的具體例子,比較好想像和理解。
加上前面的實際練習的經驗。讓我開始抓到一些感覺。


補充:
我現在看英文文章都是直接網頁翻譯,看到奇怪的名詞、句子,再切回英文版本了解原意。
雖然可能有些不精確的地方,不過這樣省了我蠻多力氣、時間。


先放上我修正後的情況。
牛的動作是跟第一版差不多,甚至好了一點。


接下來就是重點的結構了。可以對照上面,簡化了很多。



重新思考動作

先不去想額外的條件,只保留最基本的動作。
問號是SelectorComposite,右箭頭是SequenceComposite。


吃到草 Selector -> 吃草(成功) -> Selector(成功)

沒吃到草 Selector -> 吃草(失敗) -> Selector -> Sequence -> 尋找草叢(成功) -> 移動(成功) -> Sequence(成功) -> Selector(成功)


簡單來說就是牛如果沒吃到草,它會嘗試下個動作。
這裡的下個動作是尋找草並往草移動。
測試正常之後,我才開始延伸。


另外根據我第一版的經驗。
原本我想說Godot的節點樹,看著那個想像行為樹的結構應該還可以。
但我發現不行,太自虐了。非常容易眼花。

我會推薦直接用你習慣的工具,我會拿紙筆直接畫出結構。
然後回頭看著那張圖,開始照著設計圖做行為樹。
底下是我後來才做的示意圖。
圖裡有一些沒提到的名詞,可以去看我提到的資料,都有更詳細的解說。
這裡我就不多說了。

示意圖

看著這張圖,我比較好想像我的樹建到哪裡。
一邊做一邊想,會做到亂掉,不知道自己在做什麼。

AI 大概的流程。
牛肚子餓就開始吃草叢,沒得吃就尋找草叢,往它的位置移動。
然後再確認一次肚子餓不餓,餓就繼續吃。不餓了就隨便決定一個方向移動,然後吃草。


動畫處理

還有從上面的影片可以看到,
牛移動會播走路動畫,吃草會撥放低頭吃的動畫。
這裡我用了FinteStateMachine。

最開始我是嘗試直接在行為樹裡,直接呼叫播放動畫。
可能因為它不是連續執行的,沒辦法判斷動畫接續,會變成只播動畫第一幀。
所以我開始思考替代方案,想到FinteStateMachine。

第一次嘗試用其他東西去控制FinteStateMachine,
首先我想到的方法是行為樹會把現在動作對應的State存到變數。
然後StateMachine裡的process,會不斷確認跟現在的State一樣嗎,不一樣就切換State。

這樣也有達到切換State的效果。
但我是覺得這樣處理還不是很漂亮。
從網路上看有沒有什麼提示可以參考。

最後看到一個方法。以腳色本身的變化,去改變State。
以牛來說,我現在只關注它的速度。
只要是零向量也就是牛停下來了,那它會切換到吃草的State;反之有任何速度,切換到移動的State。
這樣兩個系統就是分開的,兩邊不會互相影響


結論

我推薦一邊對照網路上的資料不懂的地方就實際去測試看看。
總會慢慢抓到一些感覺,抓到感覺回頭看這些資料,又會有新的體悟。
這是一個良性循環。

以上是我這半路出家土法煉鋼想出的解法。
歡迎分享更多好方法。
最後一樣簡單的宣傳公會和群組。

Godot 開拓者交流互助公會
無論是新手還是有經驗的 Godot 使用者,都歡迎你的參與。

開拓者交流互助公會
  巴哈姆特(推薦)   Discord(推薦)   Facebook(不常用)


參考資料


行為樹概念、Beehave操作

創作回應

追蹤 創作集

作者相關創作

相關創作

更多創作