游戲設(shè)計(jì)模式 之 AI_行為樹

AI.gif

引擎:CocoCreator2.1.0
語言:TypeScript
Git倉庫地址:https://github.com/superXfx/GameDesignPatterns.git

定義——
行為被定義為層次化的目標(biāo)的集合,其表現(xiàn)為樹形結(jié)構(gòu)。
智能體首先選擇高級(jí)抽象目標(biāo),然后遞歸分解成一個(gè)可以遵照?qǐng)?zhí)行的原子目標(biāo)的集合。
以此實(shí)現(xiàn)原子目標(biāo),最終實(shí)現(xiàn)高級(jí)抽象目標(biāo)。

類圖——


BehaviorTree.jpg

行為樹圖——


image.png

類圖看起來比較復(fù)雜~,哈哈,其實(shí)不難,記住幾個(gè)關(guān)鍵單就行。
1、樹形結(jié)構(gòu),使用“組件模式”實(shí)現(xiàn)。
從“行為樹圖”中可以看出,復(fù)合目標(biāo)和子目標(biāo)組成了一個(gè)樹形結(jié)構(gòu)。
think每次根據(jù)權(quán)重(由數(shù)值策劃提供公式)選擇一個(gè)“分支”,一次執(zhí)行完整個(gè)分支下的所有葉節(jié)點(diǎn),即可完成策略——實(shí)際項(xiàng)目中會(huì)有很多層,這里簡(jiǎn)化一下。
2、通過權(quán)重選擇策略,每個(gè)策略都對(duì)應(yīng)一個(gè)繼承自Goal_Evaluator的類,對(duì)應(yīng)其返回權(quán)重的以及設(shè)置目標(biāo)的邏輯。

下面來看看具體實(shí)現(xiàn)
簡(jiǎn)單講,需要做的事情有3個(gè)
1、編寫戰(zhàn)略目標(biāo)


image.png

重寫Enter()函數(shù),負(fù)責(zé)插入子目標(biāo)

2、編寫子目標(biāo)
Goal_CheckTriggerState


image.png

Goal_FindEmptySlot


image.png

Goal_PutTrigger


image.png
image.png

以上就是策略與子目標(biāo)的實(shí)現(xiàn),主要工作就是在Enter(),與Process(dt)中,在恰當(dāng)?shù)臅r(shí)機(jī)返回目標(biāo)狀態(tài)即可。

3、(用樹形結(jié)構(gòu),即組合模式)組織起來


image.png
image.png
image.png
image.png

如圖,Goal_Think類通過每個(gè)策略的Goal_Evaluator類計(jì)算權(quán)重,然后addSubgoal,策略在Enter()中也addSubgoal。
這樣便組成了一個(gè)樹形結(jié)構(gòu),然后通過Process(dt)驅(qū)動(dòng)行為樹運(yùn)行。

擴(kuò)展:
配置化——我的思路是策劃在json表中配置 戰(zhàn)略目標(biāo)以及其對(duì)應(yīng)的子目表“樹”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容