Behaviac游戲 AI 開發(fā)框架組件
Behaviac是游戲AI的開發(fā)框架組件,也是游戲原型的快速設(shè)計工具。支持行為樹BT,狀態(tài)機FSM,HTN等多種范式,方便的編輯和調(diào)試。支持全平臺,適用于客戶端和服務(wù)器,助力游戲快速迭代開發(fā)。
編輯器可以運行在PC上,操作方便直觀可靠,支持實時和離線調(diào)試;編輯器可以導(dǎo)出xml,bson等多種格式,更可以導(dǎo)出C++,C#源碼,提供最高效率。
運行時支持全平臺,有C++和C#兩個版本,原生支持Unity。
已被《天天炫斗》、《QQ飛車》、《全民突擊》、《全民奪寶》、《九龍戰(zhàn)》等游戲及其他更多預(yù)研項目使用。
編輯器和運行時
behaviac作為游戲AI的開發(fā)框架組件,有編輯器和運行時兩個部分,這兩個部分通過元信息(描述AI實例屬性和能力方法的信息)交換信息。
元信息
元信息用來描述類型的屬性和方法。運行時導(dǎo)出元信息,如下所示。編輯器中,該元信息作為基本的語法單位用來創(chuàng)建行為樹。
<agent classfullname="framework::GameObject" base="behaviac::Agent" inherited="true" DisplayName="" Desc="" IsRefType="true"> <Member Name="HP" DisplayName="" Desc="" Type="uint" Class="framework::GameObject" /> <Member Name="age" DisplayName="" Desc="" Type="long" Class="framework::GameObject" /> <Method Name="GoStraight" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="void"> <Param DisplayName="speed" Desc="speed" Type="int" /> </Method> <Method Name="TurnTowardsTarget" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="int"> <Param DisplayName="turnSpeed" Desc="turnSpeed" Type="float" /> </Method> <Method Name="alignedWithPlayer" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool" /> <Method Name="playerIsAligned" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool" /> <Method Name="projectileNearby" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool"> <Param DisplayName="radius" Desc="radius" Type="float" /> </Method> <Method Name="distanceToPlayer" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="float" /> </agent>
在3.x版本之前的版本中,元信息必須通過運行時來導(dǎo)出,策劃需要新的屬性或方法時,必須等待程序員更新代碼重現(xiàn)導(dǎo)出元信息后才能使用。而在3.x版本 中,可以直接在編輯器中創(chuàng)建一個類型,并且創(chuàng)建它的屬性和方法,而且可以導(dǎo)出類型的c++或c#源碼,這極大的加速了迭代的過程,從而把編輯器作為一個原 型設(shè)計工具。
編輯器
編輯器是一個可以運行在Windows平臺上的編輯工具。
在編輯器內(nèi),使用鼠標(biāo)或快捷鍵,可以添加、編輯、配置、修改行為樹(包括FSM,或HTN),也可以實時或離線調(diào)試游戲的行為,既可以設(shè)斷點,也可以查看或修改變量的值。
運行時
運行時有C++和C#兩個版本,Unity使用C#的實現(xiàn),像是cocos等使用C++的引擎或平臺使用C++的實現(xiàn)。其具體邏輯是一致的,即加載編輯器中導(dǎo)出的行為樹,解釋運行之。
g_player = behaviac::Agent::Create<CBTPlayer>();
bool bRet = false;
bRet = g_player->btload(pszTreeName);
assert(bRet);
g_player->btsetcurrent(pszTreeName);
behaviac::EBTStatus status = behaviac::BT_RUNNING;
while (status == behaviac::BT_RUNNING)
{
status = g_player->btexec();
}
導(dǎo)出和調(diào)試
在編輯器內(nèi)創(chuàng)建好行為后,需要導(dǎo)出,然后運行時才可以加載運行。編輯器支持導(dǎo)出多種格式:
-
xml
-
bson
-
cpp
-
c#
其中xml和bson作為數(shù)據(jù),可以被加載,而cpp或c#作為源碼直接編輯鏈接進程序,用戶可以根據(jù)需要選擇使用最合適的格式。
功能
-
behaviac作為游戲AI的開發(fā)框架組件,主要是用來開發(fā)游戲AI。
-
behaviac的編輯器使用圖形化的界面(Visual scripting)和操作,操作直觀方便。
-
游戲中的NPC,小怪,老怪等等的游戲邏輯都可以通過behaviac來創(chuàng)建和開發(fā)。
-
behaviac并不限于開發(fā)游戲AI的游戲邏輯,也可以用來開發(fā)組隊邏輯(Squad Logic),策略AI(Strategy AI),玩家Avatar,甚至關(guān)卡設(shè)計等各種游戲場景。
-
behaviac還可以用作原型設(shè)計工具,策劃只是使用behaviac編輯器來設(shè)計類型安全的,表達嚴謹?shù)挠螒蜻壿嫛?/p>
-
C#版本的運行時原生支持unity,behaviac可以在unity內(nèi)開發(fā)游戲AI
-
在iOS平臺,作為熱更新的一種手段
-
C++版本支持全平臺,不僅可以用在客戶端,也可以用在服務(wù)器端。一套邏輯,可以根據(jù)情況分別在客戶端,服務(wù)器運行,避免重復(fù)開發(fā)。
特性
-
behaviac是游戲AI的開發(fā)框架組件,也是游戲原型的快速設(shè)計工具
-
支持持行為樹(BT),狀態(tài)機(FSM),層次任務(wù)網(wǎng)絡(luò)(HTN)等多種范式
-
編輯器可以運行在PC上,操作方便直觀可靠
-
編輯器可以導(dǎo)出xml,bson等多種格式,更可以導(dǎo)出C++,C#源碼,提供最高效率
-
支持實時和離線調(diào)試,可以設(shè)斷點,查看或修改變量
-
編輯器通過socket和游戲連接實現(xiàn)實時調(diào)試,支持遠程實時調(diào)試
-
運行時支持全平臺(Windows/Linux/iOS/Android等),有C++和C#兩個版本,原生支持Unity。適用于客戶端和服務(wù)器,助力游戲快速迭代開發(fā)
-
支持熱加載,可以不用重啟游戲就更新行為樹
-
中英文界面可選,元信息可以提供中英文顯示信息
-
支持預(yù)制件(Prefab)、子樹,方便重用共享
-
支持自定義數(shù)據(jù)類型,支持已有第3方庫中的自定義類型
-
支持擴展節(jié)點類型
