《Unity3D人工智能编程精粹》笔记

Unity3D人工智能架构模型

  • 感知:是AI角色与游戏世界的接口,负责在游戏运行过程中不断感知周围环境,读取游戏状态和数据,为思考和决策收集信息。(for example:是否有敌人接近等。)
  • 思考:利用感知的结果选择行为,在多种可能性之间切换。(such as:战斗还是逃跑?躲到哪里?)
    一般来说,这是决策系统的任务,有时也可能简单地与感知合二为一。
  • 行动:发出命令、更新状态、寻路、播放声音动画,也包括生命值减少等。这是运动系统、动画系统和物理系统的任务,而动画和物理系统由游戏引擎提供支持。

游戏AI的架构模型

对AI需求的三种基本能力:
《Unity3D人工智能编程精粹》笔记
《Unity3D人工智能编程精粹》笔记
(根据游戏种类和需求进行细化或增删)
运动层:导航+寻路,决定角色的移动路径,具体的移动行为需要动画层的配合(有许多行为可以直接由动画层处理)。运动层包含的算法能够把上层做出的决策转化为运动。
决策层:决定角色在下一时间步该做什么。
战略层:一组角色的总体行为,团队协作时用。小组中的每个角色可以有它们自己的决策层和运动算法,但总体上,它们的决策层会受到团队战略的影响。

FPS/TPS游戏中的AI解析

FPS(第一人称视角射击游戏):以玩家的主观视角来进行射击的游戏。
TPS(第三人称视角射击游戏):玩家控制的游戏人物在屏幕上是可见的,更加强调动作感。

运动层:确定角色如何在游戏世界中移动。(寻最优路)
决策层:确定角色当前目标、命令、状态和当前目的地,并与其他层通信,使角色协调地运动到一个指定的目标地点。(决定AI的执行行为)
《Unity3D人工智能编程精粹》笔记
战斗控制器:
《Unity3D人工智能编程精粹》笔记

  • 感知部分:
    • 视觉子系统:考虑距离、视场角度、当前的可视级别(例如光线、雾和障碍等)。感知受伤害、碰撞等。
    • 听觉子系统
    • 策略子系统
  • 动画部分:负责控制角色的骨骼关节。
    选择动画,选择动画参数,播放角色运动序列。

实现AI角色的自主移动——操控行为

操控行为:操作控制角色,让它们能以模拟真实的方式在游戏世界中移动。
它的工作方式是通过产生一定大小和方向的操控力,使角色以某种方式运动。
《Unity3D人工智能编程精粹》笔记
基本行为中的每一个行为,都产生相应的操控力,将这些操控力以一定的方式组合起来(将基本行为进行不同组合),就能够得到更复杂的“行为”,从而实现更为高级的目标。
《Unity3D人工智能编程精粹》笔记
无论群体中有多少个体,对于每个个体,计算复杂性有限,通过这种简单计算,可以产生逼真效果。
(两个相似的鸟群,即使是飞过相同的路线,行为也是不同的)

缺点:可能会出现无法预测的行为,在使用时许多参数需要通过实验调整。

《Unity3D人工智能编程精粹》笔记

Unity3D操控行为编程的主要基类

将AI角色抽象成一个质点——Vehicle类

《Unity3D人工智能编程精粹》笔记

控制AI角色移动——AILocomotion类

是Vehicle的派生类,能真正控制AI角色的移动。(包括计算每次移动的距离,播放动画等)

各种操控行为的基类——Steering类

是所有操控行为的基类,包含操控行为共有的变量和方法。
(操控AI角色的寻找、逃跑、追逐、躲避、徘徊、分离、队列、聚集等都可由此派生)

个体AI角色的操控行为

靠近and离开

靠近:指定一个目标位置,根据当前的运动速度向量,返回一个操控AI角色到达该目标位置的“操控力”,使AI角色自动向该位置移动。
离开:与前者正好相反,产生一个操控AI角色离开目标的力。
《Unity3D人工智能编程精粹》笔记
小三角:AI角色
预期速度:从AI角色的当前位置到目标位置的向量
操控向量:预期速度与AI角色当前速度的差(大小随当前位置变化而变化)

抵达

AI角色减速并停到目标位置,避免冲过目标。

当角色在停止半径之外,以最大速度移动。
当角色进入停止半径之内,逐渐减小预期速度,直到为0。
《Unity3D人工智能编程精粹》笔记

追逐and逃避

追逐:与靠近行为很相似,只是目标由静止不动变为可移动角色。

预测猎物的未来位置,然后向着未来位置的方向追去,才能在最短时间内追上猎物。
《Unity3D人工智能编程精粹》笔记

实现:

  • 使用一个简单的预测期,在每一帧重新计算它的值。
    (假设采用一个线性预测期,又假设在预测间隔T时间内角色不会转向,角色经过时间T之后的未来位置可以用当前速度乘T来确定)

一些情况下,追逐可能会提前结束。
例如,如果逃避者在前面,几乎面对追逐者,那么追逐者应该直接向逃避者当前位置移动。
二者之间的关系可以通过计算逃避者朝向向量与AI角色朝向向量的点积得到。

《Unity3D人工智能编程精粹》笔记
逃避:使猎物躲避捕猎者。
(比如鹿被狼追逐,鹿要不断变换逃跑方向,试图逃离狼预测的追逐方向)

随机徘徊

在游戏场景中随机放置目标,让角色靠近目标。如果每隔一定时间就改变目标的位置,这样角色就永远靠近目标而又不能到达目标(即使到达,目标也会再次移动)。

But角色有时会突然掉头,因为目标移动到了它的后面。

《Unity3D人工智能编程精粹》笔记

路径跟随

产生一个操控力,使AI角色沿着预先设置的轨迹,构成路径的一系列路点移动。

最简单的跟随路径方式
将当前路点设置为路点列表中的第1个路点,用靠近行为产生操控力来靠近这个路点,直到非常接近这个点;
然后寻找下一个路点,设置为当前路点,再次接近它。
重复这样的过程直到到达路点列表中的最后一个路点,再根据需要决定是回到第一个路点还是停止在这最后一个路点上。

  • 封闭路径:循环,永不结束。需要回到起点重新开始。
  • 开放路径:AI角色需要减速(利用抵达行为)停到最后一个路点上。
《Unity3D人工智能编程精粹》笔记

在实现路径跟随行为时,需要设置一个“路点半径”参数(会引起路径形状的变化)。
即当AI角色距离当前路点多远时,可以认为它已经到达当前路点,从而继续向下一个路点前进。
《Unity3D人工智能编程精粹》笔记

避开障碍

操控AI角色避开路上的障碍物。

当AI角色的行进路线上发现比较近的障碍时,产生一个“排斥力”,使AI角色远离这个障碍物。
当前方发现多个障碍物时,只产生躲避最近的障碍物的操控力。

《Unity3D人工智能编程精粹》笔记
分析步骤:
《Unity3D人工智能编程精粹》笔记
《Unity3D人工智能编程精粹》笔记
《Unity3D人工智能编程精粹》笔记
《Unity3D人工智能编程精粹》笔记

《Unity3D人工智能编程精粹》笔记

上一篇:Unity3d笔记


下一篇:selenium2.0(WebDriver) API