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平臺上的編輯工具。
在編輯器內,使用鼠標或快捷鍵,能夠添加、編輯、配置、修改行爲樹(包括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();
}
|
在編輯器內建立好行爲後,須要導出,而後運行時才能夠加載運行。編輯器支持導出多種格式:
其中xml和bson做爲數據,能夠被加載,而cpp或c#做爲源碼直接編輯連接進程序,用戶能夠根據須要選擇使用最合適的格式。