unity AI Planner 人工智能簡介

剛好看了就大概記錄一下,不過這個插件已經(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

好了 以上就是大概簡介= =有50個贊我就更下篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容