遊戲AI的開發框架組件 behaviac

簡述

behaviac是遊戲AI的開發框架組件,也是遊戲原型的快速設計工具。支持全平臺,適用於客戶端和服務器,助力遊戲快速迭代開發 。c++

編輯器能夠運行在PC上,操做方便直觀可靠,支持實時和離線調試;編輯器能夠導出xml,bson等多種格式,更能夠導出C++、C#源碼,提供最高效率。git

運行時支持全平臺,有C++和C#兩個版本,原生支持Unity。程序員

已被多款知名遊戲及更多其餘預研項目使用。github

全部代碼,包括編輯器和運行時所有開源https://github.com/Tencent/behaviacc#

編輯器和運行時

behaviac做爲遊戲AI的開發框架組件,有編輯器和運行時兩個部分,這兩個部分經過類型信息(描述AI實例屬性和能力方法的信息)交換信息。
安全

類型信息

類型信息用來描述類型的屬性和方法。在3.5及以前的舊版本經過運行時端導出類型信息,3.6及以後的新版本經過編輯器建立類型信息,以下所示。編輯器中,該類型信息做爲基本的語法單位用來建立行爲樹。服務器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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版本以前的版本中,類型信息必須經過運行時來導出,策劃須要新的屬性或方法時,必須等待程序員更新代碼重現導出類型信息後才能使用。而在3.x版本中,能夠直接在編輯器中建立一個類型,而且建立它的屬性和方法,並且能夠導出類型的c++或c#源碼,這極大的加速了迭代的過程,從而把編輯器做爲一個原型設計工具。網絡

編輯器

編輯器是一個能夠運行在Windows平臺上的編輯工具。
designer
在編輯器內,使用鼠標或快捷鍵,能夠添加、編輯、配置、修改行爲樹(包括FSM,或HTN),也能夠實時或離線調試遊戲的行爲,既能夠設斷點,也能夠查看或修改變量的值。框架

運行時

運行時有C++和C#兩個版本,Unity使用C#的實現,像是cocos等使用C++的引擎或平臺使用C++的實現。其具體邏輯是一致的,即加載編輯器中導出的行爲樹,解釋運行之。socket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
}
 

導出和調試

在編輯器內建立好行爲後,須要導出,而後運行時才能夠加載運行。編輯器支持導出多種格式:

  1. xml
  2. bson
  3. cpp
  4. c#

其中xml和bson做爲數據,能夠被加載,而cpp或c#做爲源碼直接編輯連接進程序,用戶能夠根據須要選擇使用最合適的格式。

behaviac能解決什麼問題

  • behaviac做爲遊戲AI的開發框架組件,主要是用來開發遊戲AI。
  • behaviac的編輯器使用圖形化的界面(Visual scripting)和操做,操做直觀方便。
  • 遊戲中的NPC,小怪,老怪等等的遊戲邏輯均可以經過behaviac來建立和開發。
  • behaviac並不限於開發遊戲AI的遊戲邏輯,也能夠用來開發組隊邏輯(Squad Logic),策略AI(Strategy AI),玩家Avatar,甚相當卡設計等各類遊戲場景。
  • behaviac還能夠用做原型設計工具,策劃只是使用behaviac編輯器來設計類型安全的,表達嚴謹的遊戲邏輯。
  • C#版本的運行時原生支持unity,behaviac能夠在unity內開發遊戲AI
  • 在iOS平臺,做爲熱更新的一種手段
  • C++版本支持全平臺,不只能夠用在客戶端,也能夠用在服務器端。一套邏輯,能夠根據狀況分別在客戶端,服務器運行,避免重複開發。

behaviac有哪些主要特性

    • behaviac是遊戲AI的開發框架組件,也是遊戲原型的快速設計工具
    • 支持持行爲樹(BT),狀態機(FSM),層次任務網絡(HTN)等多種範式
    • 編輯器能夠運行在PC上,操做方便直觀可靠
    • 編輯器能夠導出xml,bson等多種格式,更能夠導出C++,C#源碼,提供最高效率
    • 支持實時和離線調試,能夠設斷點,查看或修改變量
    • 編輯器經過socket和遊戲鏈接實現實時調試,支持遠程實時調試
    • 運行時支持全平臺(Windows/Linux/iOS/Android等),有C++和C#兩個版本,原生支持Unity。適用於客戶端和服務器,助力遊戲快速迭代開發
    • 支持熱加載,能夠不用重啓遊戲就更新行爲樹
    • 中英文界面可選,類型信息能夠提供中英文顯示信息
    • 支持預製件(Prefab)、子樹,方便重用共享
    • 支持自定義數據類型,支持已有第3方庫中的自定義類型
    • 支持擴展節點類型
相關文章
相關標籤/搜索