玩过人机对战游戏的人都知道,一个游戏是有各种机器人的。有些机器人很厉害(比如老版本Dota1里面的帕克精灵龙,总能用精准的 f 躲避真人玩家的指向性技能),有些机器人很呆萌。其实这些都是基于逻辑算法实现的,程序设计师可以通过算法让AI 很智能或者不那么聪明。不过,设计这些逻辑的人真得足够的聪明才行。试想一下,看着自己设计的AI 把真人玩家打败,是不是内心还会有一点小激动呢?
文 / 丁建雄
图 / Berni Beudel
小白是单纯为兴趣而写作的独立创作人,如果您喜欢小白的文章,欢迎关注、交流、分享(引用请链接到本文)。
Hi, I am X Man
动画系统
- Mecanim 动画系统核心概念:
a. Animation Clips:动画片段剪辑,也就是单独出来的一些动画片段,可以应用于多个不同的模型(具有相同的骨骼结构)。
b. Animator Controller:动画控制器,Animator Controller 采用State Machine 来管理模型的多个动画流程之间的逻辑关系。 - Blend Trees:用于多个动作融合显示,可以使得动画效果更加自然。
- Retargeting & Avatar:为了将动画整体重用(Retargeting)到不同的角色上,需要为角色创建骨骼结构关联。具体流程参考文件:https://docs.unity3d.com/Manual/Retargeting.html
- 一个动画其实就是各个骨骼按照规定位置、角度来移动,如果两个模型的骨骼完全相同,理论上讲就可以公用所有动画。
简单AI寻路
- Unity 寻路系统就是使用NavMesh (导航区域)和NavMesh Agent(寻路对象,玩家或者NPC(机器人)) 联合作用,完成从A 点到B 点的寻路功能。
- 对于障碍物,Unity 提供了NavMesh Obstacle 统一管理;对于传送门和跳跃等操作,使用Off-Mesh Link 统一管理。
- NavMesh Agent 具有圆柱形的物理模型,因此,可以通过设定圆柱形的尺寸来设定空间模型的边界寻路范围。
- 其中AI 主要体现在设定好各种限制之后,NPC 能自动计算出最短距离,从而按照计算的最短路径前进。
- NavMesh 需要烘焙,以预先确定行动区域,从而可以迅速计算出最短路径。具体流程:设定烘焙对象属性为NavMesh Static -- 设置烘焙参数 -- 进行烘焙。
结束语
动画其实是对于骨骼结点的运动设计,而将模型、骨骼、动画和控制逻辑响应统一起来,才是一个完整的Unity 动画系统;AI 寻路系统的核心是最短路径计算,通过预先烘焙的方式得到静态的地形模型,这样便可以快速得到最短路径。