AI中的行為系統

2021-09-11 17:18:55 字數 3159 閱讀 6323

內容都來自於此**,這裡只是裡面的文章做了乙個總結

目錄

1.「命令佇列」——行為層實現方式

2.行為樹——決策層實現方式

節點分類

行為樹節點的特性

控制節點

行為節點

行為樹的輸入和輸出以及共享資料

外部前提的實現

ai系統的請求層

ai中的行為系統就是根據收集到的資訊和特定的輸入,經過乙個決策過程,做出具體的行為,即 「決策」+「行為」。

用乙個分層模型來表示可以分成3層決策層行為層動畫資源層(左側三層)

上圖中的右側畫的是使用「命令佇列」方式來實現行為層——該實現方式又劃分為三層為「行為命令」,「行為機」和「行為節點」

首先介紹一下行為樹的兩種節點,如下圖示:

再次細分:選擇控制節點,序列控制節點,並行控制節點三種控制節點,圖中型別1,型別2,型別3

控制節點的子節點可以是控制節點,控制節點的控制其子節點的執行方式。

不管是行為節點,還是控制節點。都還一些共同的節點屬性:前提(進入節點),交接**移節點或清理資料)以及執行狀態(節點的執行狀態)。

對於前提:判斷能否進入該節點,實現為乙個evaluate評估函式。

靜態前提(繼承,虛函式):

控制節點的評估函式:取決於子節點的前提。

行為節點的評估函式:取決於具體的遊戲邏輯。

動態前提(組合方式):

對於同一種行為節點,在不同的子樹中的前提進入條件不同。

對於交接:例子中就是清理資料,比如充值一下額外的資訊的那些資料。

對於執行狀態:

比如乙個控制節點的執行狀態,如果是結束狀態應該是其控制流程已經走完才是。控制節點的型別很多,所以每種控制節點的執行狀態都要根據其具體型別來實現。

控制節點的劃分:根據1)子節點個數,2)選擇子節點的策略,3)子節點的前提設定策略,三個方面來設定

根據通用節點的特性,定義了普通函式evaluateupdatetransition,定義了虛函式onevaluateonupdateontransition函式。——邏輯資訊。每個節點還包括定義乙個上下文資訊類,定義需要記錄的資料。——執行時資訊。

控制節點的這三個虛函式都是呼叫子節點的對應函式

具體怎麼選子節點就是不同型別的控制節點自己的邏輯了。這是通用**邏輯,跟具體遊戲無關,屬於行為樹庫的內容。

下圖的實現是控制節點的實現:

行為節點onevaluate onupdate ontransition的實現,不同的是還多了三個虛函式enter,execute,exit

具體的遊戲行為繼承自這個行為節點的基類,並實現虛函式。

下圖的實現是行為節點基類的實現:

行為樹的輸入和輸出以及共享資料

介紹黑板,以及行為樹內部的操作

上述中的節點的上下文資訊不作為乙個成員變數放置在節點類中,而是需要用到的時候動態生成,統一放置到tbtworkingdata類中。儲存型別用乙個字典儲存,key節點的唯一idvalue即為該節點上下文資訊

在決策層和行為層中間抽象出乙個請求層,可以用雙緩衝的方式實現請求層

基於行為樹的ai

我們現在做的遊戲,包括手遊,網頁遊戲,ai部分策劃那邊的需求並不複雜 待機,巡邏,行走,逃跑,攻擊,被擊 而且ai需求定了,也不會有太大的改動。所以用狀態機是乙個不錯的選擇,因為狀態機確實很簡單 我們一直都是用狀態機 行為樹,實現ai的另外一種方式,先簡單介紹一下行為樹的概念,然後我們用行為樹的方式...

遊戲AI 個體AI角色的操控行為 1

1.靠近 建立乙個類steeringforseek繼承steering,將目標物體拖入target,我們的ai就會自動向target靠近。重寫其中的force方法 在vehicle中會遍歷所有的steering的子類,我們實現的靠近類重寫的force就會被加入vehicle的力中來實現物體的移動 p...

AI之用行為樹來實現邏輯

行為樹是一種在遊戲中常用的實現ai的方式,通過行為樹可行圖形化實現常用的程式結構。每次執行ai時,從根節點 root 或running節點開始遍歷,父節點執行子節點,子節點執行完後將結果返回父節點,父節點根據子節點的結果來決定接下來怎麼做。行為樹的執行過程就是查詢要執行的葉子節點的過程,查詢的依據就...