剛好看了就大概記錄一下,不過這個插件已經停更了,下面以示例工程介紹 這個插件大概就是輸入一些可操作行為和行為條件剩下的讓AI自己獨立思考
AI.Planner大概分為幾個功能塊
Actions 行為事件
一些行為的事件,例如移動,吃東西等 創建
需要創建一個Actions 的預制體
創建出來的: OperationalAction 就是你新建繼承IOperationalAction 的腳本 這里就是選擇執行哪個,這個腳本幫助代理執行動作Parameters -先決條件-執行行動的條件,就是例如吃血包要在不滿血時候吃就加上條件,(hp<maxhp) ,然后他滿足這個條件AI才會允許可以執行這個行為,具體什么時候就是AI自己去衡量Effect -物件因操作而引起的變化,數值或者創建物件之類的Cost / Reward -采取行動的成本(負)或獎勵(肯定),類似機器學習負值就盡量避免正值就多點做 代碼: IOperationalAction 必須要繼承這里示例是OttoAction : IOperationalAction<Otto, StateData, ActionKey> Otto是代理,StateData 當前狀態資料,ActionKey 是你Parameters 設定的東西,這里主要幾個函式
BeginExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 介面的
ContinueExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 介面的
EndExecution(StateData state, ActionKey action, Otto actor) IOperationalAction 介面的
UpdateNeeds(StateData state, Otto actor) 不是介面的
他這里主要是所有狀態經過他 然后這里面有個死亡終止條件,她的終止條件就是寫在這里的
Agents 代理
Enums 自定義列舉型別 例如血量,物品名稱等
右鍵創建 這里就是自定義 屬性的名稱,例如物品的名稱,血量 藍量都是這里定義 ,物品建一個羅列有什么,屬性也建一個羅列一排 記得按保存他會動態序列化增改列舉類,代碼就有這些列舉了
Termination 終止條件
就是代理Agents 終止執行的條件,就是死亡或者別的終止條件 右鍵創建
Traits 容器
就是儲存一些行為所需要的一些數值屬性,例如尋路要去睡覺:移動誰這里就會定義Agent 角色 ,移動目標點 Bed睡床 ,到達時間這里就需要定義一個Time時間 右鍵創建 示例這邊是有 Agent 角色,Bed 睡床,Dispenser 物品臺,Duration 持續狀態多少時間,Inventory 背包屬性當然具體背包實作代碼還是要寫但是框架已經帶了一個基礎的背包功能就是叫Inventory ,Need 這里是一個初始屬性他有每秒增加多少和初始值多少,就是用來定義體力 饑餓和疲勞的,Time 就是完成時間啦,Workstation 作業臺
使用
大概建立以上五個模塊的東西 角色底下建立一個空物體拖腳本,然后賦值代理資料給腳本 角色身上要掛的類DomainObjectProvider 示例有個尋路主要是掛的MotionController 上面主要是放角色含有的一些屬性例如otto上的角色和角色的位置屬性,還有背包蘋果和背包飲料,和三個屬性值 ,這些是必須要的 接著就是放置一些行為的地點了每個都會標明是什么,地點在哪
整體流程
<style>#mermaid-svg-AIndB3xm5Fi8GIYn .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .label text{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .node rect,#mermaid-svg-AIndB3xm5Fi8GIYn .node circle,#mermaid-svg-AIndB3xm5Fi8GIYn .node ellipse,#mermaid-svg-AIndB3xm5Fi8GIYn .node polygon,#mermaid-svg-AIndB3xm5Fi8GIYn .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-AIndB3xm5Fi8GIYn .node .label{text-align:center;fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .node.clickable{cursor:pointer}#mermaid-svg-AIndB3xm5Fi8GIYn .arrowheadPath{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-AIndB3xm5Fi8GIYn .flowchart-link{stroke:#333;fill:none}#mermaid-svg-AIndB3xm5Fi8GIYn .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-AIndB3xm5Fi8GIYn .edgeLabel rect{opacity:0.9}#mermaid-svg-AIndB3xm5Fi8GIYn .edgeLabel span{color:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-AIndB3xm5Fi8GIYn .cluster text{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-AIndB3xm5Fi8GIYn .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-AIndB3xm5Fi8GIYn text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-AIndB3xm5Fi8GIYn .actor-line{stroke:grey}#mermaid-svg-AIndB3xm5Fi8GIYn .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-AIndB3xm5Fi8GIYn #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .sequenceNumber{fill:#fff}#mermaid-svg-AIndB3xm5Fi8GIYn #sequencenumber{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn #crosshead path{fill:#333;stroke:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .messageText{fill:#333;stroke:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-AIndB3xm5Fi8GIYn .labelText,#mermaid-svg-AIndB3xm5Fi8GIYn .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-AIndB3xm5Fi8GIYn .loopText,#mermaid-svg-AIndB3xm5Fi8GIYn .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-AIndB3xm5Fi8GIYn .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-AIndB3xm5Fi8GIYn .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-AIndB3xm5Fi8GIYn .noteText,#mermaid-svg-AIndB3xm5Fi8GIYn .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-AIndB3xm5Fi8GIYn .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-AIndB3xm5Fi8GIYn .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-AIndB3xm5Fi8GIYn .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-AIndB3xm5Fi8GIYn .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .section{stroke:none;opacity:0.2}#mermaid-svg-AIndB3xm5Fi8GIYn .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-AIndB3xm5Fi8GIYn .section2{fill:#fff400}#mermaid-svg-AIndB3xm5Fi8GIYn .section1,#mermaid-svg-AIndB3xm5Fi8GIYn .section3{fill:#fff;opacity:0.2}#mermaid-svg-AIndB3xm5Fi8GIYn .sectionTitle0{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .sectionTitle1{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .sectionTitle2{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .sectionTitle3{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-AIndB3xm5Fi8GIYn .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .grid path{stroke-width:0}#mermaid-svg-AIndB3xm5Fi8GIYn .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-AIndB3xm5Fi8GIYn .task{stroke-width:2}#mermaid-svg-AIndB3xm5Fi8GIYn .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .taskText:not([font-size]){font-size:11px}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-AIndB3xm5Fi8GIYn .task.clickable{cursor:pointer}#mermaid-svg-AIndB3xm5Fi8GIYn .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-AIndB3xm5Fi8GIYn .taskText0,#mermaid-svg-AIndB3xm5Fi8GIYn .taskText1,#mermaid-svg-AIndB3xm5Fi8GIYn .taskText2,#mermaid-svg-AIndB3xm5Fi8GIYn .taskText3{fill:#fff}#mermaid-svg-AIndB3xm5Fi8GIYn .task0,#mermaid-svg-AIndB3xm5Fi8GIYn .task1,#mermaid-svg-AIndB3xm5Fi8GIYn .task2,#mermaid-svg-AIndB3xm5Fi8GIYn .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutside0,#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutside2{fill:#000}#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutside1,#mermaid-svg-AIndB3xm5Fi8GIYn .taskTextOutside3{fill:#000}#mermaid-svg-AIndB3xm5Fi8GIYn .active0,#mermaid-svg-AIndB3xm5Fi8GIYn .active1,#mermaid-svg-AIndB3xm5Fi8GIYn .active2,#mermaid-svg-AIndB3xm5Fi8GIYn .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-AIndB3xm5Fi8GIYn .activeText0,#mermaid-svg-AIndB3xm5Fi8GIYn .activeText1,#mermaid-svg-AIndB3xm5Fi8GIYn .activeText2,#mermaid-svg-AIndB3xm5Fi8GIYn .activeText3{fill:#000 !important}#mermaid-svg-AIndB3xm5Fi8GIYn .done0,#mermaid-svg-AIndB3xm5Fi8GIYn .done1,#mermaid-svg-AIndB3xm5Fi8GIYn .done2,#mermaid-svg-AIndB3xm5Fi8GIYn .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-AIndB3xm5Fi8GIYn .doneText0,#mermaid-svg-AIndB3xm5Fi8GIYn .doneText1,#mermaid-svg-AIndB3xm5Fi8GIYn .doneText2,#mermaid-svg-AIndB3xm5Fi8GIYn .doneText3{fill:#000 !important}#mermaid-svg-AIndB3xm5Fi8GIYn .crit0,#mermaid-svg-AIndB3xm5Fi8GIYn .crit1,#mermaid-svg-AIndB3xm5Fi8GIYn .crit2,#mermaid-svg-AIndB3xm5Fi8GIYn .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-AIndB3xm5Fi8GIYn .activeCrit0,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCrit1,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCrit2,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-AIndB3xm5Fi8GIYn .doneCrit0,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCrit1,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCrit2,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-AIndB3xm5Fi8GIYn .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-AIndB3xm5Fi8GIYn .milestoneText{font-style:italic}#mermaid-svg-AIndB3xm5Fi8GIYn .doneCritText0,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCritText1,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCritText2,#mermaid-svg-AIndB3xm5Fi8GIYn .doneCritText3{fill:#000 !important}#mermaid-svg-AIndB3xm5Fi8GIYn .activeCritText0,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCritText1,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCritText2,#mermaid-svg-AIndB3xm5Fi8GIYn .activeCritText3{fill:#000 !important}#mermaid-svg-AIndB3xm5Fi8GIYn .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-AIndB3xm5Fi8GIYn g.classGroup text .title{font-weight:bolder}#mermaid-svg-AIndB3xm5Fi8GIYn g.clickable{cursor:pointer}#mermaid-svg-AIndB3xm5Fi8GIYn g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-AIndB3xm5Fi8GIYn g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-AIndB3xm5Fi8GIYn .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-AIndB3xm5Fi8GIYn .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-AIndB3xm5Fi8GIYn .dashed-line{stroke-dasharray:3}#mermaid-svg-AIndB3xm5Fi8GIYn #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn .commit-id,#mermaid-svg-AIndB3xm5Fi8GIYn .commit-msg,#mermaid-svg-AIndB3xm5Fi8GIYn .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-AIndB3xm5Fi8GIYn g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-AIndB3xm5Fi8GIYn g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-AIndB3xm5Fi8GIYn g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-AIndB3xm5Fi8GIYn .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-AIndB3xm5Fi8GIYn .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-AIndB3xm5Fi8GIYn .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-AIndB3xm5Fi8GIYn .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-AIndB3xm5Fi8GIYn .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-AIndB3xm5Fi8GIYn .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-AIndB3xm5Fi8GIYn .edgeLabel text{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-AIndB3xm5Fi8GIYn .node circle.state-start{fill:black;stroke:black}#mermaid-svg-AIndB3xm5Fi8GIYn .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-AIndB3xm5Fi8GIYn #statediagram-barbEnd{fill:#9370db}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-state .divider{stroke:#9370db}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-AIndB3xm5Fi8GIYn .note-edge{stroke-dasharray:5}#mermaid-svg-AIndB3xm5Fi8GIYn .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-AIndB3xm5Fi8GIYn .error-icon{fill:#522}#mermaid-svg-AIndB3xm5Fi8GIYn .error-text{fill:#522;stroke:#522}#mermaid-svg-AIndB3xm5Fi8GIYn .edge-thickness-normal{stroke-width:2px}#mermaid-svg-AIndB3xm5Fi8GIYn .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-AIndB3xm5Fi8GIYn .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-AIndB3xm5Fi8GIYn .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-AIndB3xm5Fi8GIYn .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-AIndB3xm5Fi8GIYn .marker{fill:#333}#mermaid-svg-AIndB3xm5Fi8GIYn .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-AIndB3xm5Fi8GIYn {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
Agents代理整合幾個模塊
交由繼承BaseAgent的去思考執行哪個狀態行為
執行代碼繼承自IOperationalAction去實作具體邏輯
狀態結束
終止條件
都只是丟進Agents里面讓他自行決定行動,但是具體實作代碼還是要寫,例如使用物品血量減少50點,在使用該物品效果的代碼上要寫上減少50,在預制體里面寫上減少50是告訴Agents去思考這個操作是這樣,不會有具體效果,具體效果要用代 碼去實作 MD坑的一批 附上示例工程 https://github.com/Unity-Technologies/otto
好了 以上就是大概簡介= =有50個贊我就更下篇