ETH官方钱包

前往
大廳
主題 達人專欄

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

Muryan | 2024-06-02 20:42:26 | 巴幣 2118 | 人氣 633

參加完 Game Jam 後我開始思考再來要做什麼。
上次的 Small Alien, Big Planet 主要嘗試的是 Dialogic2,以及 Brackyes 的影片內容。

平臺遊戲已經做了幾個,所以我想試試看別種類型的。
因此這次類型就決定是 Top-Down Shooter,也是門檻比較低的。
這次主要想試的是 Behavior Tree、Strategy Pattern,次要的是 Particle System、UI等等。

Behavior Tree 是因為我想了解 Enemy AI 除了 FSM 還有什麼好方法,
然後發現 Godot 有一款插件 Beehave 可以幫我方便的實現它,
就像 Dialogic2 可以簡單的加入對話系統。
這篇主要就是來說說剛嘗試的不專業感想和紀錄。





這是我第一個找到的影片。主要就是展示了這款插件在做什麼。
但是因為他講得很快,並不是很好理解,所以我繼續找資料。

有一些 Behavior Tree 常用的名詞說明,而且是中文的。
搭配底下兩部影片實作一次,回來看會更好理解。

題外話:
作者是 PINIX Games 臺灣的獨立遊戲工作室。
之前有在 G8 展玩過他們的《鬥技場的阿利娜》。
最近才發現原來他們有在嘗試Godot。


這是我找到的第二部影片。
原本是想找來了解 Behavior Tree 的概念,仔細看發現他也是用 Beehave。
所以剛好參考他怎麼用插件。


最後是我的主要參考,原始插件的作者的教學影片。
還蠻詳細的,除了後面速度快了一點,需要稍微調慢速度。


雖然看過這些資料,我覺得還是似懂非懂。
所以最快熟悉的方法就是親手實驗了。
從最簡單的例子下手,只有 Action Leaf 的情況。
移動到特定目標。


#MoveToTarget

tick() 目前我的理解是類似於 _process() 會不斷執行裡面的內容。
並回傳 SUCCESS、FAILURE、RUNNING。

actor 是你的 AI 要使用的身體,blackboard 是雲端資料庫可以儲存共用的資料。
以上是我自己的比喻,如果不太對,歡迎在底下指正。
這段程式碼就是當我按下ENTER時,腳色移動到我的滑鼠位置。

實際效果


題外話:
原本我是想照著前面看的教學影片用 move_toward() 去移動腳色。
就像下面這樣,結果我忘記他只是回傳值,還要把它設回 actor.position。
試一段時間都不會動,才先用 tween 去移動腳色。
後來才發現問題,解決後真的是舒服 (ゝ??)b
就像是穿著新內褲迎接新年元旦的早晨一樣


接著更進一步實驗 Selector 和 Sequence,概念類似於 or 和 and。


移動跟前面一樣。增加的是改變顏色。
當腳色靠近滑鼠到一定距離的時候,會回傳 Failure。
這時候 Sequence 會回傳錯誤跳出來,不會繼續往下執行 MoveToTarget。
然後 Selector 會接著執行下面的 ChangeColor。

#IsMouseNearby

#ChangeColor


實際效果

簡單測試了最簡單的功能後,
開始跟著上面提到的 Behavior Trees - Godot Game Dev (BETTER AUDIO)
一邊照著操作,一邊對照 Beehave 官方文件

補充:
前面自己測試的時候,有個疑問是 Action Leaf 和 Condition Leaf,
好像都會回傳 success 和 failure,那兩者差在哪裡?
後來我在原作者影片中找到解答,結論是執行上沒差。
基本上是一樣的,只是圖示不一樣,方便區分用途。


當滑鼠靠近的時候,會跟著滑鼠移動。
當滑鼠離開一定範圍會自己往最近的據點移動。

實際效果

右邊是插件提供的Debug工具,可以看到執行時的樹狀圖。
這樣練習過一輪之後,我自認熟悉的程度從Lv1 提升到 Lv2 了ヽ( ° ▽°)ノ


跟 Dialogic2 一樣測試完之後,接著要開始練習放進去遊戲了。
最後一樣簡單的宣傳公會和群組。

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

開拓者交流互助公會

創作回應

%%鼠 拒收病婿
加油[e12]
2024-06-03 00:42:36
Muryan
謝謝[e19]
2024-06-03 08:13:04
追蹤 創作集

作者相關創作

相關創作

更多創作