unity3d人工智能学习(8)——状态树

时间:2024-03-25 16:09:06

创建简单的行为树

操作过程

  1. 导入unity behavior designer v1.5.5包,这是一个状态树的插件。
    unity3d人工智能学习(8)——状态树

  2. 新建一个cube,命名为NPC。

  3. 点击tools->behavior designer->editor,会出现状态树的搭建场景。
    unity3d人工智能学习(8)——状态树
    unity3d人工智能学习(8)——状态树

  4. 选择NPC,可以搭建NPC的状态树,NPC界面也会出现behavior tree。

  5. 图示位置为状态树名字。
    unity3d人工智能学习(8)——状态树

  6. 简单建立一个状态树。选择tasks->actions->log为例子,会显示下图的状态树。
    unity3d人工智能学习(8)——状态树unity3d人工智能学习(8)——状态树

  7. 在inspector里可以修改每个状态的具体信息。
    unity3d人工智能学习(8)——状态树

复杂任务

Composites
Sequence—实现多个任务
可以实现多个任务,简单设置2个log,分别输出“111” “222”。
unity3d人工智能学习(8)——状态树
Actions
log----输出
idle----停一段时间,一直running
wait----等待一个时间,再返回

behavior tree界面
options
restart when corr-----结束后,再开启。

案例:敌人的巡逻

  1. 导入behavior designer - movement_pack_v1.3.2包。

  2. 建立一个场景,包括地面与敌人enemy。为敌人建立状态树,改名为enemyAITree。添加action->movement->patrol。
    patrol----控制两点间移动
    unity3d人工智能学习(8)——状态树

  3. 设置4个空物体作为巡逻点。

  4. 为地面添加寻路系统,敌人添加NAV mesh agent。

  5. 设置patrol任务。
    waypoints----巡逻点
    unity3d人工智能学习(8)——状态树unity3d人工智能学习(8)——状态树

案例:控制主角行走

  1. 建立player,为player添加NAV mesh agent,状态树。
    unity3d人工智能学习(8)——状态树

  2. seek的设置
    target—目标点
    unity3d人工智能学习(8)——状态树
    绿色为player
    unity3d人工智能学习(8)——状态树

案例:控制主角的追寻

  1. 判断player是否看到敌人。状态树添加conditionals->movement->can see object。
    target object-----看到的目标
    object layer mask-----看到的层
    view distance -----观看到的距离
    unity3d人工智能学习(8)——状态树

  2. 通过中间变量传递。设置多个不同类型的变量
    unity3d人工智能学习(8)——状态树

  3. 为第一个seek,can see object以及第二个seek修改信息。
    unity3d人工智能学习(8)——状态树unity3d人工智能学习(8)——状态树unity3d人工智能学习(8)——状态树

  4. 添加一个Sequence,一个selector。最终的状态树。
    unity3d人工智能学习(8)——状态树

  5. Sequence
    unity3d人工智能学习(8)——状态树