剛好看了就大概記錄一下,不過這個插件已經(jīng)停更了,下面以示例工程介紹
這個插件大概就是輸入一些可操作行為和行為條件剩下的讓AI自己獨(dú)立思考
AI.Planner大概分為幾個功能塊
Actions 行為事件
- 一些行為的事件,例如移動,吃東西等
- 創(chuàng)建
-
需要創(chuàng)建一個Actions 的預(yù)制體
- 在這里插入圖片描述
-
創(chuàng)建出來的:在這里插入圖片描述
- OperationalAction 就是你新建繼承IOperationalAction的腳本 這里就是選擇執(zhí)行哪個,這個腳本幫助代理執(zhí)行動作
- Parameters -先決條件-執(zhí)行行動的條件。就是例如吃血包要在不滿血時候吃就加上條件,(hp<maxhp),然后他滿足這個條件AI才會允許可以執(zhí)行這個行為,具體什么時候就是AI自己去衡量
- Effect-對象因操作而引起的變化,數(shù)值或者創(chuàng)建對象之類的
- Cost / Reward-采取行動的成本(負(fù))或獎勵(肯定)。類似機(jī)器學(xué)習(xí)負(fù)值就盡量避免正值就多點(diǎn)做
代碼: IOperationalAction 必須要繼承這里示例是OttoAction : IOperationalAction<Otto, StateData, ActionKey> Otto是代理,StateData當(dāng)前狀態(tài)數(shù)據(jù),ActionKey是你Parameters 設(shè)定的東西,這里主要幾個函數(shù)
-
BeginExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 接口的
- 就是狀態(tài)進(jìn)來的事件
-
ContinueExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 接口的
- 狀態(tài)持續(xù)中一直觸發(fā)的
-
EndExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 接口的
- 狀態(tài)離開
-
UpdateNeeds(StateData state, Otto actor) 不是接口的
- 他這里主要是所有狀態(tài)經(jīng)過他 然后這里面有個死亡終止條件,她的終止條件就是寫在這里的
-
Agents 代理
BaseAgent類,它處理規(guī)劃系統(tǒng)和控制器。此外,該類擁有初始域數(shù)據(jù)的序列化字段,用戶可以在編輯器的檢查器窗口中設(shè)置這些字段。BaseAgent類繼承MonoBehaviour,默認(rèn)情況下,更新每個框架上的控制器。
-
這里示例就是Otto繼承了 放在角色下面,代理數(shù)據(jù)預(yù)制體也賦值這里
- 在這里插入圖片描述
-
預(yù)制體,這里放置了可進(jìn)行的行為和終止條件死亡在這里插入圖片描述
Enums 自定義枚舉類型 例如血量,物品名稱等
-
右鍵創(chuàng)建在這里插入圖片描述
-
這里就是自定義 屬性的名稱,例如物品的名稱,血量 藍(lán)量都是這里定義,物品建一個羅列有什么,屬性也建一個羅列一排在這里插入圖片描述在這里插入圖片描述
- 記得按保存他會動態(tài)序列化增改枚舉類,代碼就有這些枚舉了
Termination 終止條件
- 就是代理Agents 終止執(zhí)行的條件,就是死亡或者別的終止條件
-
右鍵創(chuàng)建在這里插入圖片描述
Traits 容器
- 就是儲存一些行為所需要的一些數(shù)值屬性,例如尋路要去睡覺:移動誰這里就會定義Agent 角色,移動目標(biāo)點(diǎn) Bed睡床,到達(dá)時間這里就需要定義一個Time時間
-
右鍵創(chuàng)建在這里插入圖片描述
- 示例這邊是有 Agent 角色,Bed 睡床,Dispenser 物品臺,Duration持續(xù)狀態(tài)多少時間,Inventory背包屬性當(dāng)然具體背包實現(xiàn)代碼還是要寫但是框架已經(jīng)帶了一個基礎(chǔ)的背包功能就是叫Inventory,Need 這里是一個初始屬性他有每秒增加多少和初始值多少,就是用來定義體力 饑餓和疲勞的,Time就是完成時間啦,Workstation 工作臺
- 在這里插入圖片描述
使用
- 大概建立以上五個模塊的東西
-
角色底下建立一個空物體拖腳本,然后賦值代理數(shù)據(jù)給腳本在這里插入圖片描述
-
角色身上要掛的類DomainObjectProvider 示例有個尋路主要是掛的MotionController在這里插入圖片描述
- 上面主要是放角色含有的一些屬性例如otto上的角色和角色的位置屬性,還有背包蘋果和背包飲料,和三個屬性值 ,這些是必須要的
- 接著就是放置一些行為的地點(diǎn)了每個都會標(biāo)明是什么,地點(diǎn)在哪
- 在這里插入圖片描述
整體流程
- image.png
- 都只是丟進(jìn)Agents里面讓他自行決定行動,但是具體實現(xiàn)代碼還是要寫,例如使用物品血量減少50點(diǎn),在使用該物品效果的代碼上要寫上減少50,在預(yù)制體里面寫上減少50是告訴Agents去思考這個操作是這樣,不會有具體效果,具體效果要用代
碼去實現(xiàn) MD坑的一批請?zhí)砑訄D片描述
附上示例工程 https://github.com/Unity-Technologies/otto



