內容都來自於此**,這裡只是裡面的文章做了乙個總結
目錄
1.「命令佇列」——行為層實現方式
2.行為樹——決策層實現方式
節點分類
行為樹節點的特性
控制節點
行為節點
行為樹的輸入和輸出以及共享資料
外部前提的實現
ai系統的請求層
ai中的行為系統就是根據收集到的資訊和特定的輸入,經過乙個決策過程,做出具體的行為,即 「決策」+「行為」。
用乙個分層模型來表示可以分成3層:決策層,行為層和動畫資源層(左側三層)。
上圖中的右側畫的是使用「命令佇列」方式來實現行為層——該實現方式又劃分為三層為「行為命令」,「行為機」和「行為節點」。
首先介紹一下行為樹的兩種節點,如下圖示:
再次細分:選擇控制節點,序列控制節點,並行控制節點三種控制節點,圖中型別1,型別2,型別3
控制節點的子節點可以是控制節點,控制節點的控制其子節點的執行方式。
不管是行為節點,還是控制節點。都還一些共同的節點屬性:前提(進入節點),交接**移節點或清理資料),以及執行狀態(節點的執行狀態)。
對於前提:判斷能否進入該節點,實現為乙個evaluate評估函式。
靜態前提(繼承,虛函式):
控制節點的評估函式:取決於子節點的前提。
行為節點的評估函式:取決於具體的遊戲邏輯。
動態前提(組合方式):
對於同一種行為節點,在不同的子樹中的前提進入條件不同。
對於交接:例子中就是清理資料,比如充值一下額外的資訊的那些資料。
對於執行狀態:
比如乙個控制節點的執行狀態,如果是結束狀態應該是其控制流程已經走完才是。控制節點的型別很多,所以每種控制節點的執行狀態都要根據其具體型別來實現。
控制節點的劃分:根據1)子節點個數,2)選擇子節點的策略,3)子節點的前提設定策略,三個方面來設定。
根據通用節點的特性,定義了普通函式evaluate,update,transition,定義了虛函式onevaluate,onupdate,ontransition函式。——邏輯資訊。每個節點還包括定義乙個上下文資訊類,定義需要記錄的資料。——執行時資訊。
控制節點的這三個虛函式都是呼叫子節點的對應函式。
具體怎麼選子節點就是不同型別的控制節點自己的邏輯了。這是通用**邏輯,跟具體遊戲無關,屬於行為樹庫的內容。
下圖的實現是控制節點的實現:
行為節點有onevaluate onupdate ontransition的實現,不同的是還多了三個虛函式enter,execute,exit。
具體的遊戲行為繼承自這個行為節點的基類,並實現虛函式。
下圖的實現是行為節點基類的實現:
行為樹的輸入和輸出以及共享資料
介紹黑板,以及行為樹內部的操作
上述中的節點的上下文資訊不作為乙個成員變數放置在節點類中,而是需要用到的時候動態生成,統一放置到tbtworkingdata類中。儲存型別用乙個字典儲存,key為節點的唯一id,value即為該節點上下文資訊。
在決策層和行為層中間抽象出乙個請求層,可以用雙緩衝的方式實現請求層
基於行為樹的ai
我們現在做的遊戲,包括手遊,網頁遊戲,ai部分策劃那邊的需求並不複雜 待機,巡邏,行走,逃跑,攻擊,被擊 而且ai需求定了,也不會有太大的改動。所以用狀態機是乙個不錯的選擇,因為狀態機確實很簡單 我們一直都是用狀態機 行為樹,實現ai的另外一種方式,先簡單介紹一下行為樹的概念,然後我們用行為樹的方式...
遊戲AI 個體AI角色的操控行為 1
1.靠近 建立乙個類steeringforseek繼承steering,將目標物體拖入target,我們的ai就會自動向target靠近。重寫其中的force方法 在vehicle中會遍歷所有的steering的子類,我們實現的靠近類重寫的force就會被加入vehicle的力中來實現物體的移動 p...
AI之用行為樹來實現邏輯
行為樹是一種在遊戲中常用的實現ai的方式,通過行為樹可行圖形化實現常用的程式結構。每次執行ai時,從根節點 root 或running節點開始遍歷,父節點執行子節點,子節點執行完後將結果返回父節點,父節點根據子節點的結果來決定接下來怎麼做。行為樹的執行過程就是查詢要執行的葉子節點的過程,查詢的依據就...