最后生还者2同伴AI设计
げっそり
编辑于 2026年03月29日 11:50
最后生还者‖美国末日

一、非战斗状态同伴

1、设计目标

  • 过场动画与实际游玩同调的需要:最后生还者2的电影化叙事表现到达了一个新的高度。过场动画中的角色动画动作表现,人物表情十分细腻真实。过场动画外的玩家操控游玩时需要有依然活灵活现、栩栩如生,与过场动画相匹配的NPC。

  • 最后生还者2有更多的过场动画外非战斗叙事,NPC同伴需要能够实时动态,及时响应玩家的互动。

  • 更大的关卡探索需要:最后生还者2中存在许多自由探索区域,NPC需要能表现生动和真实的与玩家一起探索新区域或引导玩家的探索。

  • 制作大量且独特的NPC伙伴:最后生还者2中有11个人类同伴和一条狗,每个同伴都需要有自己的特色

2、NPC与玩家探索系统设计

1.设计目标

适用于一个玩家可以选择任何想要的方式自由探索的关卡,如玩家的探索顺序,速度,时间。

NPC同伴能够真实的表现出它明白自己所处的位置以及它对周围环境的观察,最重要的是它需要与玩家一样,表现得是第一次探索这个关卡。

NPC同伴不仅要对周围环境有自然的互动,还要能够符合角色的人物设定,包括角色性格,情绪,情感,精力。

2.NPC同伴探索动画

同伴的所有叙事探索相关动画被分为三种

动作动画:动作动画与同伴和环境互动相关,它在特定位置触发

  • 动作动画不与游戏世界环境中的任何物体交互。

  • 动作动画安排在特殊的场景地点,这些场景点通常是兴趣点,让玩家感到角色能感知到游戏世界,且角色只会朝向特定方向播放动画,这样做有如下好处:

    • 角色不直接与环境互动,减少工作量。

    • 同样的动作动画在精确位置和物体上播放时,玩家很容易感知到角色在不同的环境下的动作都是都是相同的,而如果动画不直接与物体接触只是面朝大致方向,那么相同的动画从环境的不同角度播放玩家不易感知出动画的重复率高。

可以看到,同样的动画,在不同的位置和角度播放十分自然,玩家不会很容易注意到这是动画复用。

空闲动画:角色静止状态下的闲置动画,每个同伴角色都有自己的独特的Idle动画,用于表现人物的性格,当前的心理状态。

探索动画:探索时的走路,小跑动画,与在战斗时的Locomotion动画区分开,探索动画的移动动画更轻松悠闲。重点是要与人物的心情状态相匹配。

3.探索系统

要让NPC同伴在玩家面前能够像真人一般自然的感受环境,需要按照一定的规则选择合适的位置播放合适的动画。该位置的选择是手工与程序自动生成相结合,同伴会跟随玩家移动,以同伴为中心的一定范围内寻找手工标记的兴趣点以及自动生成适合播放空闲动画的位置。

最后生还者2用到的点位查询系统类似于虚幻引擎的EQS。不同的是最后生还者的点位是由寻路网格数据自动生成,也可以通过手动标记生成,以及还可以在Run Time时生成。

设计师在希望同伴可以互动的位置放下标记,用来执行行动动画。空旷的区域自动按照一定的规则(如每个点位之间相隔一定的距离)生成空闲动画点位。这些操作在runtime之外执行,同伴在游戏中可以直接对这些提前存在的点位进行打分遴选。

位置选择的评分项目可能是:

  • 同伴到达位置的距离

    • 位置距离同伴既不能过远也不能过近

  • 位置与同伴当前面朝方向的夹角

    • 位置与同伴当前面朝方向的夹角越大,得分越低,防止角色移动时的突然大幅度转向的机械僵硬表现

  • 位置到墙角的距离

    • 位置距离墙角越近,得分越低,防止同伴面对墙壁或者角落播放空闲动画的诡异情况出现

  • 最近是否使用过该位置

    • 如果上次使用过该位置那么该位置的得分为零

  • 位置与玩家的距离

    • 位置距离玩家既不能过远也不能过近

  • 前往位置的路径是否距离玩家很近

    • 前往该位置的路径越靠近玩家得分越低,防止同伴在玩家边乱窜。

  • 位置是否在屏幕上

    • 位置不在屏幕上的得分为零,其余为1

位置选择由以上评估打分后,综合打分结果相加获得最后分数,选择分数最高的位置点。

成功选择目标位置后,同伴径直走向目标点仍然会让同伴表现得像机器人一般,特别是当同伴在频繁选择目标时,同伴在玩家眼中仿佛对该区域了如指掌,为了营造同伴和玩家都是初来乍到一同探索区域的体验,在设计上,同伴在前往目标位置前会首先播放“四处查看”的动画。

同伴探索行为流程如下:

同伴在探索中最主要的状态只有两个:在跟随玩家范围内和在跟随玩家范围外,同伴探索周围环境的行为只在其与玩家的距离符合要求时出现。

如图所示,跟随玩家范围有最远距离和最近距离,当同伴超过最远距离,就会在跟随玩家范围内选择并前往该位置。选择该位置的规则是:

  • 该位置需在跟随玩家选点范围之内,最近距离之外。

  • 该位置与自身连线和玩家到同伴连线的夹角需小于某个角度,否则同伴可能会进行不必要的绕路,导致行为比较机械。

跟随玩家选点范围外,最远距离内作为选择跟随玩家位置点的缓冲区,防止同伴短时间内多次触发跟随玩家。

3、NPC引导系统设计

不管是在专门的叙事关卡,还是半开放Gameplay关卡中,同伴都有走在玩家前方引导玩家前往某个区域的表演。游戏中的同伴在玩家前方引导时,会有各种各样自然的动作,比如:边走边回头,倒过来反着走,四处查看周围环境。这一切都大大提升了最后生还者2的游戏质感。

最后生还者2中使用样条线驱动同伴带领玩家游览关卡,下面是详细设计。

如图所示

  • 黑色线条是设计师设置摆放的样条线,同伴会沿着这个线条前进。

  • 绿色线条表示的是同伴跟随的线条,同伴要紧贴它前进,所以可以代表同伴移动中的大致位置。

  • 橙色线条与绿色线条始终保持一定距离,这是玩家能够与同伴保持的最近距离,通过设置它们之间的距离可以保证同伴始终在前方引导玩家。

  • 蓝色线条表示的是同伴在玩家停止移动后它应该停止的位置,它与距离无关,这里稍后说明。

  • 这些绿、橙、蓝线条在样条线上移动,而且与样条线保持垂直关系。

通过上述的设置,同伴获得了始终领先玩家并带领玩家的能力。在非叙事关卡的半开放地图中也使用到了这一设计,帮助玩家回到正常的游玩路线上。

到这一步已经是大多数游戏设计的终点了,但离更有沉浸感的叙事体验还差了很多。同伴只是在玩家前面走,边走边说话。顽皮狗让同伴在说话时会时不时回头看向玩家,与玩家有更多的肢体动作交流,把说话变成了对话,同时同伴还会对周围的环境做出符合自己当前动机的行为。

这些同伴与玩家互动的时刻是设计师手动在关卡中设置的点位,这些点位包含了动画信息,同伴靠近就会触发对应动画。得益于Motion Matching,设计师只需要关注玩家与同伴之间的距离,玩家和同伴的速度以及加速度,同伴在哪个位置会看向玩家。将点位放置在玩家头上,在特定的位置或者对话时段激活点位,同伴就可以回头与玩家对话。

当玩家停下,或者往回走,同伴不会立即停下跟随玩家。而是先继续走到设计师在关卡中设计好的停止点停下等候玩家,也就是蓝色线条位置。在叙事关卡中,同伴的动作表现了人物当前心情,包括人物的步伐快慢,移动速度。通过设计成同伴在玩家的视线中消失来触发同伴寻找玩家巧妙的省去了对人物移动节奏把握的工作量。此时同伴会移动到玩家能够看到同伴的第一个点位寻找玩家。

在一段叙事关卡中,设计师主要设定了同伴的大致移动路线,玩家与同伴应保持的距离,玩家与同伴的起步及速度,同伴需要注意的特殊表演点位,以及同伴的停止点位。

二、战斗状态同伴

1、核心设计原则

  • 同伴不能是累赘:同伴的存在不能破坏玩家的战斗体验,比如同伴不能频繁挡住玩家的路线,不能在中途破坏玩家的潜行成果,这些都会摧毁玩家对该角色的好感以及破坏核心的游戏体验。

  • 同伴要有用:同伴不能是一个存在和不存在都对游玩体验没有任何影响的要素,玩家如果不能切实感受到同伴的作用,那么游戏处处力求的真实可信的游戏世界感就会幻灭。

  • 同伴交互要更真实自然:同伴在战斗时的表现要与电影化叙事塑造的真实感相匹配,在动画和实际游玩中要保持一致的氛围,同伴的行为不能滑稽和出戏。

  • 塑造真实可信角色:最后生还者2最重要的仍然是叙事体验,同伴NPC要能揭示角色的背景、性格和彼此间的关系,让玩家建立同伴之间的羁绊又或者是情感共鸣。

2、同伴跟随系统设计

战斗状态时的同伴跟随与非战斗状态下类似,他们只在选择点位的方式上有区别。如下图所示,同伴超出跟随最远距离范围后就会触发跟随玩家的移动。

触发跟随移动后,按照下列图示选择跟随的点位。选择点位时会随机选取跟随玩家选点范围最近距离之间的一个距离作为选点圆环的半径。

  1. 玩家移动时,每个Tick持续的生成和检测跟随点位,玩家停止移动后,停止持续生成。

  2. 同伴跟随玩家时,在玩家周围圆环内生成一系列位置点。如图1所示,射线检测位置点到玩家是否有阻挡物,如有则排除该点位。

  3. 如图2所示,剩余位置点向正前方发射一条线段,射程可调节,线段终点再次发射射线检测终点到玩家之间是否有阻挡物,如有则排除该点。

圆环的弧度范围可以调节,最后生还者2的弧度范围是除了玩家角色正前方左右15度的所有范围,这样同伴不会挡住玩家开枪的方向。

在剩下的点位中,通过以下标准给每个点位打分,最后选择综合得分最高的点位

  • 距离最近的敌人的距离

  • 这个点到自己的距离

  • 这个点到玩家的距离

  • 这个点附近是否有障碍物

由于在玩家持续移动中,选点也会持续进行,为了保证同伴移动时的稳定性,不会在玩家左右两侧乱窜,在成功选择点位后,要给该侧的点位更高的权重,如第一个选择的点位位于玩家左侧,那么左侧的所有点位在玩家的本次移动停止之前都会拥有一个更高的权重,更有可能得到更高的分数。

3、同伴掩体系统

玩家和同伴进入战斗状态后,以玩家为中心每一帧搜索评估附近可用的掩体。掩体功能与玩家的同伴设计无关,故这里只关注同伴如何使用掩体。

如图所示,以玩家为中心发射若干条射线到周围障碍物上,障碍物存在着已经提前生成好的掩体边,对检测到的掩体边进行打分,选出最佳的掩体。

这些打分项目可能是:

  • 和玩家的距离:是否能与玩家形成交叉火力?离玩家是太近还是太远?

  • 到自己的距离

  • 该点的光线亮度是否会在潜行中暴露自己

  • 该点的总体敌人威胁方向

  • 这个点附近是否有障碍物:能否对高威胁目标进行有效射击?

  • 安全性: 能否抵挡来自已知敌人的火力?

  • 侧翼优势: 是否位于敌人侧翼?

  • 路径成本: 到达该点是否需要穿越开阔地带?

当射线检测到附近有掩体时,同伴优先前往评估后的最佳掩体位置,而没有检测到掩体时,同伴只能前往跟随系统选择的点位。

同时掩体边选择与敌人的视线有关,当同伴一旦进入敌人的视线范围内,当前的掩体点将会被立即否决,并且所有在敌人视线范围内的掩体边都会不打分直接否决。此时同伴的首要行为是立即前往下一个不在敌人视线范围内,且分数最高的掩体。因此,掩体边选择也存在不选择任何一个边的情况,此时,就会默认前往跟随玩家系统为同伴选择的点位。

4、同伴战斗

设计目标:

  • 在战斗中能帮助玩家,同伴不能当作陪衬品

  • 与玩家一同行动,紧密合作,最重要的是玩家能够感受到同伴对战斗的帮助

  • 不改变原有战斗难度设计下,让同伴发挥最大作用

潜行

核心机制:玩家未被敌人发现时,同伴永远不会被发现,一旦玩家被发现,同伴也会自动暴露。

这表示即使同伴就站在敌人面前,敌人也会熟视无睹。但是这种情况却不会出戏,因为同伴暴露在敌人眼前时,玩家也肯定在敌人的视线下。

同伴在有敌人且未被发现的情况下,始终保持潜行姿势移动,同时潜行的掩体位置一旦暴露在敌人的视线下,同伴就会转移到最近的没有暴露在敌人视线下的掩体后。玩家不会知道敌人是否已经发现同伴,玩家只会认为同伴在敌人即将发现它前就已经转移成功再次躲藏起来。

同时,同伴始终围绕在玩家周围,与玩家保持相当近的距离。在掩体系统机制下,当同伴就站在敌人面前时,说明玩家附近十分空旷,没有任何掩体,玩家不太可能有躲藏的可能性,这时同伴也会跟着玩家一起被敌人发现,很少出现敌人没有发现玩家和同伴而同伴十分暴露的情况。

然而,从玩家反馈来说,很多玩家遇到了出现挡住玩家路或者阻止玩家进入掩体的问题。同时,由于同伴不能破坏玩家潜行,所以即使有上面提到的防护措施,但是同伴仍然完全有可能呆在敌人面前而敌人熟视无睹的尴尬情况。这几乎是所有有这类玩法的游戏的通病,也是一种非常棘手的情况。

一般来说,不可能通过设计更聪明的AI让它躲避敌人的搜查,即使花费巨大成本做出来,要么会对游戏性能造成一定影响,要么玩家最后得到的体验提升和开发难度相比性价比极低。毕竟同伴系统的各种巧思设计在不存在时会出戏,存在时玩家却很难注意到。

要解决这个问题,核心原则:同伴的潜行不会导致玩家被发现不能变。

射击

核心机制:当玩家被发现后,同伴就会开始射击敌人,同伴的进攻行为收到射击频率射击精度的限制,它会受到多种因素影响:移动状态、受压制程度、与目标的距离等。甚至会故意射偏几枪来模拟真实战斗中的紧张感。同时同伴和其射击的敌人如果不在玩家屏幕内,那么同伴射击造成的伤害将为0。被敌人发现进入战斗后,同伴跟随玩家与选择站点的方式依然与之前所述大致相同。

  • 被敌人发现后,跟随系统的最远距离和跟随玩家选点范围会扩大,有掩体优先通过掩体系统选出的最佳掩体进入。

  • 无法找到掩体时移动到跟随系统选择的最佳站位点。

  • 同伴从无掩体的位置移动到另一个无掩体位置时,可以在中途边开枪边移动。

这样的设计,可以切实的让玩家感受到同伴真的有在起作用,同时确保正常游玩下,同伴不会影响游戏难度和挑战乐趣。这里说正常游玩下是因为如果玩家刻意让同伴对付所有敌人,同伴无限子弹和生命值杀光所有敌人只是时间问题。之所以强调刻意是由于只要玩家希望体验游戏的乐趣,那么玩家势必会主动激进的杀敌,这时,在屏幕外的敌人和同伴不会对战斗局势产生任何影响。而只要玩家观察同伴是否有在“认真干活”,那么同伴就会向玩家展现它努力的一面,而如果玩家面对敌人的任何进攻都不采取行动,只是一味的躲避子弹,并观察同伴的行为,那么同伴就会帮玩家做完所有需要做的活。

总结起来,这样设计最后达成的效果让玩家误以为,只要自己想让同伴起作用,那么同伴就会做下所有的工作,只要自己独自解决问题,同伴也不会和自己“争抢功劳”。

射击目标

  • 总会有一个敌人被分配去攻击同伴,这个分配过程是动态的

  • 剩余的其他敌人会只攻击玩家

  • 敌人角色分配由战斗管理器处理

目标选择与威胁评估:

威胁值计算: 每个敌人NPC都有一个动态的威胁值,其决定因素包括:

  • 敌人类型: 巨无霸 > 循声者 > 普通人类。

  • 敌我距离: 越近威胁越高。

  • 敌人行为: 正在冲锋的敌人 > 正在瞄准玩家的敌人 > 躲在掩体后的敌人。

  • 玩家标记: 被玩家标记的敌人威胁值会获得巨大加成。

AI会优先攻击当前威胁值最高的目标。

威胁评估:

每种敌人都有自己的基础威胁值,例如:巨无霸 > 循声者 > 人类,再根据特定的战场情况,计算出动态的威胁值。

威胁值 = 基础威胁值 * Modifier_1 * Modifier_2 * ...

Modifier:

  • 距离修正: 距离越近,分数越高(指数增长)。

  • 行为修正: 正在冲锋/射击 > 正在瞄准 > 正在移动 > 躲在掩体后。

  • 目标修正: 正在攻击同伴 > 正在攻击玩家。

最后排序出在场的敌人中的威胁值排名,例如:敌人B对同伴的威胁最高>敌人A对玩家的威胁最高>敌人C威胁最低。