游戏里的人工智能AI
最近在写读书笔记,刚好涉及游戏AI这一块,就在这里总结一下,有什么问题请随时指出。
首先基本概念,人工智能AI(Artificial Intelligence)是指由人创造的一些模拟人的行为的系统,这适用于游戏中角色对人物的模拟。我们可以认为,AI系统的强大也决定了一个游戏是否惊险/有趣。反正总结就是一句话吧,太简单的AI会让人觉得索然无味,太难的AI会让人wocao,然后弃坑,所以尽量设计好AI吧。
基本的AI模型,可以分为层次处理运动层/决策层/战略层。
游戏中的AI也可以分为四块:1.操控游戏中角色的自主移动,包括群组行为操控;2.构建寻路系统,使游戏中角色之间可以找到目标并向目标移动,较为有名就是A*寻路算法,当然也可以直接使用unity自带的NavMeshAgent组件实现寻路;3.游戏中角色对游戏世界的感知,最简单的就是角色本身的生命状态/武力值等,复杂点还包括感知哪里有敌人,哪里有队友,哪里发生大的事件(如爆炸);4.游戏角色的自主决策,就像人的本能,感觉痛就缩手,游戏角色也应当对一些事件有自己的决策,实现方式就是有限状态机与行为树的构建。
游戏中的AI角色是处于一个感知/思考/执行的循环中的,即感知游戏世界中的各类信息,拾取需要的信息进行思考还如何应对,再根据设定的机制执行。第二段文字中介绍了AI的一个通用模型,这里做具体讲解,图示如下。
接下来仔细分析其中几个游戏AI的内容吧:
1.群体行为与个体行为
群体行为即一个群体共同会做出的行为,如鸟群,会聚集在一起,同方向飞行,又会适当保持一定的距离,同时也可能出现几个个体鸟群是有个性的。这种群体行为当中也会有个体行为,如某两只鸟会靠的特别近,存在一定的偶然性,但总体保持一致的群体行为,才是符合真实世界的群体行为。实现时,可以在群体中设置一个领导者,并设一个layer给所有可以加入群体的对象,当在范围与视线内,这些个体可以加入群体,并根据群体特性加各种力调整其运动。
个人行为与群体行为是可以叠加作用的,但还是有一些特殊情况需要排除,如:物体在被追逐时,就不需要做徘徊;物体在要躲避碰撞时,就暂时不要考虑群体的影响等。因此我们可以给每个操控行动力加权重,甚至可以在某些情况下关掉某个操控力的控制。2.感知系统
感知系统与AI系统互不包含,却有着巨大的关系,只有一个完善的感知系统才能做出好的AI体验。感知系统是游戏AI角色对周围游戏世界的感知,如声音源判断/队友死亡做出反应等。下图给出一个较为复杂的感知系统。
一般来说感知系统包含听觉/视觉/记忆等,不同游戏对感知系统的要求大不相同,甚至有些游戏只需要知道game object的位置即可,这样的感知系统就很简单了。然而如果一个感知系统很复杂,那么在其中的开销就会很大,就会抢走一些CPU的预算。通常来说感知系统的实现基础有:轮询/事件机制/触发器。轮询在庞大的感知系统下似乎不是一个很好的选择,事件机制则需要提前向事件管理中心注册自身感兴趣的事件(大型感知下,效率较高),触发器则是采用unity自带的Collider Box,选择is Trigger,并在代码中进行监听即可,实现简单且有效。
3.FSM
FSM(有限状态机)适用于人物状态不多的情景,即通过状态机记录下当前状态,并对比是否满足其他状态转换的控制条件,如果满足,则进行状态转换。当然如果状态很复杂,那么考虑采用行为树实现AI的决策。FSM最简单的实现方式即为switch,但这种情况下很可能出现转换情况的错误考虑,而且会很混乱,可能跳入同时满足两个状态转换的情况。此时,可以考虑采用FSM框架来实现FSM,即创建状态基类和状态类,并且每个状态类维护自身的状态转换字典,借助代理的方式轻松实现转换。此外,还需要有一个所有状态的管理类(单例模式),用于注册维护状态与状态转换。
注:我看的书是《u3d人工智能变成精粹》,图也是来自该书,但内容与理解均为原创。