Unity人工智能游戏开发笔记

Posted by 蔡华的博客 on August 29, 2018

前言

  • 本着学习一下游戏AI开发的目的看了书,总体来说本书涉及的技术比较浅显,但是胜在面面俱到,很适合没有做过AI开发的同学。
  • 但是本书关于模糊逻辑部分非常坑,令人发指。

概要内容

FSM
  • 有限状态机算是最简单的一种AI的实现,它的核心是状态,逻辑运算的结果表现为状态的变化。主要包含三个要点:
    • 转换:状态间的关系
    • 规则:触发某一状态转换
    • 事件:触发规则检查
  • 关于FSM我之前有写过,包括网上也有很多教程。
感知系统
  • 重要概念:
    • Entity:包含玩家主体对象和环境对象
    • Aspect:标记卡。这个用于让AI判断检测到的物体是不是搜索的目标。
    • Sense
  • Sense:字面翻译过来就是个感知,它包含了视觉、听觉、触觉、嗅觉和超自然的感知(忽悠人的^_^)。
  • 实现:以下罗列出unity引擎中的实现
    • 视觉:通常用于表达AI是否看到,unity用可以使用多条射线来制作。在视觉中也有FOV的概念,这个在制作射线的时候可以作为因素考虑进去。
    • 听觉、触觉、嗅觉:球体实现。触觉用碰撞体其实是比较好理解,听觉和嗅觉有点抽象,但是本质还是不同的碰撞体检测不同的layer。
    • 超自然的感知:直接通过获取系统数据来实现感知,作弊的行为。
寻路
  • 寻路是游戏中很重要的AI行为,书中提到了A star,也用到了unity的NavMesh组件,在这里就不具体说了。
集群行为
  • 三个基本的概念:
    • 分离性:个体之间保持固定距离
    • 排列的整齐性:整体间相同的方向和速度
    • 内聚性:个体与集群中心位置进保持最小距离
  • 书中实现了多个不同的算法,也利用unity引擎的一些内置功能俩实现。
行为树
  • 行为树体现为任务节点。在行为树中有很多功能不同的节点,有完成基础任务的叶子节点,也有用于逻辑的复合节点和修饰节点。

  • 节点的状态一般分为三种:成功、失败、运行状态(等待)

复合节点
  • 序列(Sequence):逐个执行node,当出现失败时返回失败;否则一直执行完。node之间是and关系。
  • 选择器(Selector):只要一个node成功就返回成功,如果运行完了都没有成功的则为false。node之间是or关系。
  • 注意,节点之间的and、or的关系是可以自己控制的。
修饰节点
  • 定义:
    • 修饰节点只包含一个子节点,接受子节点返回的状态。
    • 可以自由组合使用
    • 根据自身的参数估算子节点结果,可以根据设置重新得到一个子节点结果(反相器)或者设置子节点频率(重复器、限制器)。
  • 反相器:NOT标识符,接受与其子节点返回状态相反的结果。
  • 重复器:重复估算子节点特定的次数,直至满足修饰节点定义的条件。
  • 限制器:限制子节点估算次数。
模糊逻辑
  • 在以往的二元逻辑中,基本只有true和false。但是在模糊逻辑中,数值是[0,1],在这个区间内的值代表着一种模糊的状态。

  • 三个步骤
    • 模糊化:根据隶属度函数从具体的输入得到对模糊集隶属度的过程。
    • 推理方法:从模糊规则和输入对相关模糊集的隶属度得到模糊结论的方法。
    • 去模糊化:将模糊结论转化为具体的、精确的输出的过程。
  • 这部分的内容请移步游戏开发中的人工智能(十):模糊逻辑 。 本书模糊逻辑部分根本就是不完整的,内容质量非常的差。