AI-PLANNER使用

定义实体和组件

  • SemanticObject 为gameobject添加各种component
  • Traits : 相当于component.可以定义各种属性

定义处理系统

  • Problem 依托 DecisionController运行计划

  • StateTermination 为Problem 提供中止条件

  • SemanticQuery 根据query为 DecisionController提供实体

  • Action : 相当于一个特殊的system的基类.他定义了参数,和处理条件.以及effects和reward,但是没有实现具体的方法(executionInfo),executionInfo是需要手动定义的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     public abstract class PlannerActionSystem : SystemBase
    {

    List<ParameterDefinition> m_Parameters = new List<ParameterDefinition>();


    List<Operation> m_Preconditions = new List<Operation>();



    List<ParameterDefinition> m_CreatedObjects = new List<ParameterDefinition>();


    List<string> m_RemovedObjects = new List<string>();


    List<Operation> m_ObjectModifiers = new List<Operation>();


    float m_Reward;

    List<CustomRewardData> m_CustomRewards;


    Unity.AI.Planner.Controller.ActionExecutionInfo executionInfo;


    protected override void OnUpdate()
    {
    //检查条件

    //将参数传给executionInfo

    //然后执行方法


    //处理effect.对object进行修改,创建,删除

    //然后处理reward

    }

    }

actions

  • motives 相当于 preconditions ..需要一些设定才会执行这个
  • Requirements 也可以使用preconditions代替 ,

domain

维护了一个entities列表,当entity触发了OnTriggerEnter事件会增加到这个列表中.

aiplanner倒是不需要这个..他们是通过entity和component进行目标查找的