引言
AI仅仅是AI吗?
它们在一片充斥大量角色的土地上平静地行走,追捕你或者只是在巡逻的时候看守一扇门,这不禁令人发问:“这些实体到底在想些什么?”

watch-dogs-npc-profiles(from gamasutra)
“这些实体到底在想些什么?”
我对这类问题一直很感兴趣,也很佩服有些AAA游戏AI能够避开障碍,在毫不费力的情况下躲过枪林弹雨并准确无误地找到你的位置。所以我开始学习关于复杂AI的一切:移动,行为,训练等。我的AI不仅仅是想成为只会撞到墙壁的简单僵尸!
这就是我的想法。
但,什么是基于转向的AI行为呢?

figure1(from gamasutra)
它是一个实体如何决定自己在空间中的移动,如何与你和其他游戏元素互动的方式。简而言之,就是它如何在你的世界中生存!首先出现在我脑海中的这种概念图是《模拟人生》的非玩家角色。它们当然具有确实很复杂的行为树。
有时候你无法直接插入一个角色就指望它立即生效,你必须训练它,并且你可以使用ORTS等软件来执行这一操作,这是用来创造角色技能与游戏实体之间的平衡,例如战略或塔防游戏就是如此。你还可以使用基因编程来进化AI行为。
为什么是转向行为?
这些东西都很棒,但对于我的动物放牧游戏来说,我需要一些不同的操作。我去年制作的首个原型只能使用一个简单的近似行为:每只小羊都有一个目标节点,它们在受到牧羊犬的恐吓之前会使用一个简单的力向量来跟随它,在受到惊吓之后它们会改变目标。从视频中可以看出,它们无法看见彼此,也并不像我所期望的那样出现群体性的行为。我的研究就由此开始,并因此突然发现了我真正所需的东西。
“自主性角色是一种用于电脑动画和交互媒体(如游戏和虚拟现实)的自主性代理类型。这些代理代表故事或游戏中的一个角色,并且拥有一些即兴行为的能力。它与事先编写好动作的动画片角色,以及游戏或虚拟现实中由人类或参与者实时操纵的“虚拟角色”形成鲜明对比。在游戏中,自主性角色有时也称为非玩家角色。
自主性角色必须包含拥有一些人类即兴表演技能的自主性机制,这些角色通常不是真正的机器人,当然也不会是人类演员,但却兼具这两者的一些属性。”
你可以将转向行为用于:
*赛车游戏AI:沿着路面行走的汽车,或者跟随指挥的轮船。
*任何使用导航AI的游戏:RPG中的NPC,动作游戏角色:A* 和循径转向行为。
*含有AI行为的游戏需要:结群、漫游、追逐和逃避、寻找等行为。
转向行为并不会消耗太多CPU,所以你可以放心地在手机游戏中植入这一设置。
一个简单的例子
这是来自全局视野的一个转向行为。

基于OpenSteer框架(from gamasutra)
每个行为代表一个力向量。通过让向量比例更大,赋予其更多权重,可以让实体往这个力行为的方向移动。例如,将玩家设置为寻找者,这样你就可以让实体角色遵从一个方向,然后添加一个将躲避狼实体的羊实体。现在为羊添加一个跟随某个地点的漫游力,这样你就可以得到以下图表:

Steer_3(from gamasutra)
你可以从ShiVa维基页面ShiVa Steering下载这个样本。
我为什么要选择ShiVa引擎呢?——你可以用Lua编码,并用C++输出游戏,它极其有效,所以我可以在低配置设备上以较好的帧率运行超过15个实体的复杂行为。
它如何运行?
在这个例子中,我们用每个鼠标事件更新了玩家实体即寻找者的目标地点。因此这个实体最重要的力就是寻找函数。我们使用物理引擎和一个半球碰撞器来作为动态基础。
逃跑的实体想找一个可以避开追捕者的地方。所以逃避函数就是它们最重要的力。而追捕者则试图接近目标实体。
数学
首先你得实现实体的转变,然后计算向量和方向以获得下一个力的向量。查看其距离是否大于半径,令向量标准化,并以一个比例限制设置每个实体的新速度。
当你合并所有力并设置新速度后,角色就会遵循行为动作。
