AI操控行为

概述

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

游戏AI的架构模型
(1) 运动层:移动角色的能力,运动层包含的算法能够把上层做出的决策转化为运动
(2) 决策层:做出决策的能力。决策层的任务是决定角色在下一步该做什么。当决策层做出决策后,由运动层和动画系统来执行决策
(3) 战略层:战略战术思考的能力。战略指的是一组角色的总体行为,这时AI算法不只是控制单个角色,而是会影响到多个角色的行为
高层负责决策,低层负责执行

FPS AI状态
空闲,巡逻,战斗,徘徊,逃跑,寻找
策略选择,战斗部分的任务,如何选择敌人,目标选择,武器设计点位置

单独的AI角色基本操控行为

(1) 使角色靠近或离开目标的“Seek"、”Flee“行为;施加一个当前方向减去目标方向的力
(2) 当角色接近目标时使它减速的“Arrival”行为。当接近目标时,不在全速移动,开始减速,直到到达目标。当在范围之外时全力移动,在范围之内,开始减速,直到0。当大于半价时,预期速度为目标方向的单位向量乘以最大速度,小于半价时,预期速度为目标方向减去当前方向
(3) 使捕猎者追逐猎物的“Pursuit”行为,假设T时间内是往当前方向移动,那么计算在T时间内先计算出目标位置,往这个目标位置移动,而不是傻傻的跟在目标的屁股后面
(4) 使猎物逃离捕猎者的“Evade”行为,预期速度为当前位置减去预测捕猎者的位置的单位向量乘以最大速度
(5) 使角色在游戏世界中随机徘徊的“Wander”行为,设置一个徘徊距离,找一个圆上的一个点加上一个随机位移new Vector3((Rang.value-0.5)2radius,),在转成圆上的点dir.normalized*radius,再加上当前方向的单位向量乘以徘徊距离+圆上的随机点得到目标方向。预期速度为目标方向的单位向量乘以最大速度
(6) 使角色沿着某条预定路径移动的“Path Following”行为。
(7) 使角色避开障碍物的“Obstacle Avoidance”行为等,先判断是否会遇到障碍物(固定距离射线检测),会的话,从障碍物的原点到预测点的方向施加一个力

基本行为中的每一个行为,都会产生相应的操控力,将这些操控力以一定的方式组合起来(实际上就相当于将这些基本“行为”进行了不同的组合),就能够得到更复杂的“行为”,从而实现更为高级的行为,其中产生的速度和产生的合力都需要限制一个最大值。

小队或群里多个AI角色,基本的组行为

先找到附近的队友列表
(1) 与其他相邻角色保持一定距离的“Separation”行为:避免个体在局部过于拥挤的操控力。预期速度为遍历这个列表,依此加上当前位置减去队友位置的单位方向除以这个距离,可以判断如果这个距离小于一定的范围,在乘以一个格外的因子
(2) 与其他相邻角色保持一致朝向的“Alignment”行为:朝向附近同伴的平均朝向的操控力,首先遍历这个列表得到这个列表的平均速度,预期速度为这个平均速度,施加的力为当前速度减去平均速度
(3) 靠近其他相邻角色的“Cohesion”行为:向附近同伴的平均位置移动的操控力
无论群体的个数,对于每个个体,计算的复杂性都是有限的,通过这种简单的计算,就可以产生逼真的效果。缺点无法预测,但是效果更真实。

跟随领队行为

首先先找到跟随点:领队的速度来确定,即领队速度反方向的单位向量乘以一个固定距离,相当于领队后面的一点距离
(1) 抵达:向跟随点移动,在即将到达时减慢速度;
(2) 逃避:如果AI跟随者挡住了领队的路线,它需要迅速移开
(3) 离开:避免多个跟随者过于拥挤

为了跟随者太过于拥挤,要加上分离行为

如果领队突然改变方向,为了防止跟随者挡住领队的路线,跟随者需要加上逃避行为,不需要一直激活,加一个判断是否会挡住在激活。领队需要加上碰撞避免行为

排队通过狭窄通道

当通过通道时,我们希望有序的通过,而不是拥挤,所以需要加上排队行为,需要用到两种操控行为。
(1) 靠近:在当前AI角色前方一定距离的点内范围检测是否有其他AI角色,如果有并且这个角色的速度小于当前角色的速度,那么就乘以一个比例因子,例如0.8
(2) 避开障碍:跟之前的没多大区别

操控行为开源库:
https://github.com/ricardojmendez/UnitySteer

跟AStar对比优点:

(1) 可以更好地模拟随机徘徊行为
(2) 具有较高的效率
(3) 更适合仿真大的群体的呈现一定个性的行为

猜你喜欢

转载自blog.csdn.net/weixin_44806700/article/details/120450970