作者:点357口径太妃糖 6年经验,专注游戏任务设计。
引言
这其实是一次基于工作中想到的问题的思考,或者说是探讨。
因为某些原因,我接触到了一个非常类似GOAP(Goal-Oriented Action Planning)的系统。我的工作目标是为这套系统的下的NPC设计属于NPC的任务,提供给玩家体验。
但从体感来说,很多人其实对这套系统下的NPC有些“不太适应”——一方面是对于设计者而言,当他们去设计一些非常流程化的,脚本化的情节时,往往需要额外的功能来“剥夺”GOAP NPC的系统;另一方面作为GOAP NPC系统的开发层,他们也不知道应该怎么去丰富GOAP NPC在叙事中的表现。
所以这大概就是我写下这篇文章的源动机——我的文章会比较多的提到《逃离塔科夫》《潜行者》《天国拯救》等比较新的利用到GOAP NPC的例子(塔科夫我只是推测他使用了GOAP NPC,因为行为确实比像。而且谈到塔科夫的GOAP NPC的话绕不开AI PMC,所以默认我们讨论的是PVE),来去谈谈他们怎么去理解GOAP NPC的行为,他们如何去设计玩家的叙事环境和任务。
GOAP NPC
如果你不知道GOAP是什么,那么我来给你描述一种NPC设计。
通常来说,游戏的NPC会分为两种设计思路——基于行为树驱动的NPC,和基于状态机驱动的NPC。
行为树像是一个可以循环的思考Flow,一个AI会在一个从上往下的多叉树上按照节点执行的顺序去执行行为。节点的定义有很多,可以是查询环境;可以是移动到某个指定点/随机点;可以是检查Collision的Overlap事件。
我确实对状态机设计了解不太多,献丑了
而状态机驱动的NPC则走的是基于事件或基于其他某些东西的状态切换机制(当然这点我不是特别了解,我正经鼓捣过的AI其实只有行为树,所以就不献丑了),你可以简单理解为设计者为NPC定义了多种状态,比如攻击,受击,Dot等等,每个状态会对应一种应对表现。
这两种AI都有一个特点——他们需要基于某种线性逻辑,或是逻辑碎片来进行运作。对于传统的线性驱动游戏,或者是ACT/ARPG的BOSS来说无伤大雅。毕竟玩家流程大多数是可控的,很多时候你甚至可以让脚本接管AI来进行表演。而行为树或状态机在进行一些比较精细化的表现时更加可控,能够很好的适应线性流程需要的那些设计。
但我们都知道一点——游戏的世界在变大,或是游戏需要变的更加“规则随机性“(游戏不再提供某种线性的剧本,而是一种全局的规则和你当前需要达成的目标,完成目标的方式由你自己决定)
这使得传统基于行为树和状态机的NPC变的不太……聪明。
所以GOAP这套本源自2004年F.E.A.R的系统又重新被提了出来。不论是以单局回合为主的游戏(比如塔科夫 虽然他们没说自己的AI走的是GOAP,但至少正式版里部分AI的行为还是很像的)或者是开放世界(《天国拯救2》的NPC就是基于GOAP系统设计的),他们都用这套系统来构建NPC,效果也都不错。
战马在GDC 2025分享了他们在《天国拯救2》中使用GOAP来构建NPC的例子:https://gdcvault.com/play/1035576/Game-AI-Summit-Combining-GOAP
但这就有个问题——我们其实都知道GOAP NPC的优势:NPC会根据World State(世界状态)中的定义判断自己当前的GOAL(目标)是什么,然后去执行对应的Action(行为)。但他有点……过于不可控了。因为AI拥有自己的GOAL和Action,所以他自己会决定自己要去做什么,这使得设计者几乎无法保证他按照自己的想法在进行行动。所以通常在流程设计里,GOAP NPC也只是有限的开放在流程之中,或是干脆就做成一种Combat AI,在战斗的过程中直接切换。
但GOAP框架下的游戏并非不能呈现叙事,相反GOAP框架下的游戏因为规则和目标导向,能够更好地基于Gameplay来呈现叙事内容。只是我们得转变一下思路,从传统流程控制的任务设计方向里跳出来,转而从玩家的行为和心理去设计。
玩家在用本能玩游戏
如果你看过我写的**让玩家用本能来玩游戏——简明鱼人任务|叙事设计手册(四),那你应该知道我在这篇文章里提到了一个概念——”基于玩家行为驱动的任务模型“。
其实我们跳出任务设计的角度来思考,玩家在游戏中每经历一次挑战,或者进入到一个陌生的环境,再或者遭遇某个事件,玩家自己都会开始这个思考循环,并以此给自己创造解决方案。
我们假设你玩过《逃离塔科夫》,你作为一个刚体验这个游戏的,暂时被这个游戏里的其他玩家或AI BOSS折腾过的萌新,你会自然而然的对游戏的不同地图产生不同的”强弱/难易“概念。
- 比如你可能觉得立交桥新区只会刷SCAV,不算难,但进入宜家就可能要面对笑出强大的killa;
- 再比如你可能纵横新手阶段的中心区,但你听说中心区21级后会刷bos,不太好对付;
- 又或者你知道工厂区域结构很简单但地图小,随时可能有个抡锤子的疯子过来跟你招呼两下……
发现一个问题没有?
上述对地区,对boss,对地图的概念,并非游戏的”剧情“或”任务“告诉你的,他完完全全源自你自己数次踏入地图时的体验得出来的。
换言之,这是一套源自你自己体验游戏时的本能产生的叙事。你给这张地图构建了一个初始的情境,并根据你的体验和当前状态了解了现状,你在进入地图之前构建了一个属于自己的目标,然后进入地图来做出行动。
在正式版之前,塔科夫的地图开放可谓是惨无人道——你亲爱的尼沙皇并不在乎你作为新手第一次进的是工厂还是海关,除了实验室外的所有地方都直接丢给你。
而正式版尼沙皇却一改原先测试的设计,给这些地图都加上了解锁条件。新的地图解锁机制既能算科学也能算不科学——新手除了中心区就是立交桥,这两张图既有简单的结构,但也有带有一定挑战的boss。玩家可以在这两张图里学习《塔科夫》的基础游戏内容,包括见到AI的行为,阵营划分;了解地图内的区域,物资点,撤离机制等等。
新版立交桥确实结构很清晰,商场内和商场外几乎变成了两款游戏
但与此同时,如果你觉得这两张图能给你天地任驰骋的感觉,你依然能够在立交桥的宜家遇到Killa和锤哥,这两个新手阶段相当不好对付的Boss。尼基塔依然在立交桥给你展现游戏残酷的一面。
这迫使玩家在地图中基于上面提到的本能来了解游戏规则,并基于自己了解到的规则进行游戏。一个玩家基于规则了解后的任务叙事自然的呈现出来,玩家会给自己设立目标,知道自己进入战局需要做什么,目标是什么,路线是什么。而他的体验则取决于GOAP NPC是否按照自己对规则理解的方式在运作。
换言之,玩家在这样的一个情境下去学习游戏,而学习游戏的过程创造了属于自己的叙事。
听起来还不错,但只是对环境有感知的话,还不足以构建玩家进入地图时自发产生的叙事,甚至玩家依然缺少一个进入地图的目标。
而几乎使用了GOAP这套系统的游戏,不论是《辐射3》《极度恐慌》《塔科夫》《潜行者》《天国拯救》,在任务设计上都采用了一个机制——目标导向的任务,和基于GOAP系统创造的环境驱动型叙事。
环境驱动型叙事
Quest是个很简单的结构,这是从RPG时代传下来的规矩。
所谓的委托,有委托需要执行的目标,有关于委托的信息,还有委托的奖励。
在RP元素不断强化的年代,Quest开始加入了各种各样的元素。NPC可能会跟你绘声绘色的讲述一段故事,或是让你观看某个演出,再或者是给你前往目标的路上做一些丰富的设计。
在这样的目标下,Quest开始变的有些流程化,也就有了Quest Step的概念。
设计者会习惯性的利用Quest/Step的”线性“和”阶段性“这一特性,来创造各种可控”流程“。我们会将任务拆分成宏观目标和微观目标,微观目标是一步一步引导你做什么的step,宏观目标则是你本次踏上旅途的驱动力。
从经验上来讲,Step通常也会是某些演出的开始点,因为这方便玩家读取存档点或者断线重连后,重新播放这些脚本
通常来说,这样做的目的是利用Step设计更多可控的叙事内容。有点像以前COD里的”CheckPoint”的概念,当你来到一个检查点时,通常也意味着一个阶段的表演正准备开始。我们可能会在这个Step对应的Trigger触发时创建环境里的情境,播放一些Sequence/Timeline,做一些NPC对话或者脚本演出。
这一切目的有两个,对应了前面提到的“基于玩家行为驱动的任务模型”中的【创建情境】和【了解现状】。并以强制或半强制的方式为你创建一个你认为你当前应该去做的目标,促使你进行下一步。
这相当于游戏主动地以玩家为单位进行表演,对吧?演出全部砸在你的脸上,脚本和行为都只发生在你的面前。
但是,基于GOAP系统设计的游戏世界,由于AI可以自己决定自己需要做什么(Action),设计者只能宏观的给到他各种状态约束(GOAL和World State),设计师其实很难创造一个“砸在玩家脸上”的流程体验。
可这其实也意味着,游戏正在按照某种规则约束自己在运行。这个规则约束的方式包括了游戏的全局规则,地图区域设计,GOAP AI中的GOAL list。
这些规则决定了NPC,玩家,世界三者之间的关系。NPC利用行为践行和印证世界的宏观关系。而这层关系又需要以玩家产生互动,或是允许玩家成为体验的一方,这样玩家才能够感知。
这些都没有依赖玩家当前身上的任务和任务目标去产生,他只是客观的基于一种“世界状态”,这个状态可能源自另一个系统,也可能源自AI自发在场景里产生的Action(比如两拨在打架的AI可能会引来更多的AI改变GOAL)。
类似于A-Life系统在《潜行者》的效果
我将这些称呼为“环境驱动型叙事”,他并非基于任务叙事或流程叙事创建,而是由规则和GOAP系统自发产生的叙事表现。他并没有基于设计师明确的设计(某个步骤或某个触发器触发下必定在某个地方创造某个单位并执行某个行为),而是一种基于规则自然产生的表现。
这种表现是有限随机的,它主要影响的是玩家对当前情境和现状的判断。他可能会在玩家进行某个目标的过程中产生,也可能在一开始进入区域时产生,更可能只是在其他玩家的口耳相传中产生。
通常来说,他是一个一次性买卖——你需要在前期对游戏里的阵营关系,地区的地图设计和阵营分布,不同阵营里的NPC GOAP进行设计,然后让他们在地图里跑起来。他的目标其实是给玩家创造关于这个地区的“印象”,也鼓励玩家去传播自己眼中的这个“印象”。
而当你在这一步完成之后,你只需要做一件很简单的事情——在你的这个情境里创造一个【目标明确,但实现模糊】的任务。也就是“目标导向任务”。
目标导向任务
目标导向任务的设计其实很简单,基于你游戏中的阵营,或是你希望玩家体验到的叙事,或是某种引导诉求,来去创造一个“让玩家进入地图”的动机。
这类任务有一个特点:他的目标很明确且匮乏,通常是击杀/进入或离开区域/获取道具/和什么东西进行交互。扩展到其他类型游戏的话还有和NPC对话/拍照等等。
我们通过环境驱动型叙事去创造了一个环境的情境,玩家对这个区域产生了固有的印象。在你的任务推给玩家后,玩家自然会结合你的目标和你任务中提到的区域的复杂度做判断。
《塔科夫》有很多在游戏社群里臭名昭著的任务,比如“天神之眼”“挖矿-1”等等。他们都是把一个看似比较一般的挑战放在了一个高危险的环境,或者在这和环境上又给任务叠加了一个带有一定难度的附加条件。
想象一下,如果一个前往工厂做挖矿-1(修理面板)任务的玩家知道工厂有很大概率刷新锤哥,而修理面板的区域刚好就在锤哥附近。玩家可能就会重新审视这个任务的难度,从而思考自己应该怎么行动。而这会强化他对工厂这张地图,以及锤哥这个角色在场景里面行为的印象。进而改变他真正进行任务的流程——他可能会先宰了锤哥再去做任务,或是尝试赌一把锤哥没刷新直奔修理点。而这一切的体验又会在你进入战局后,基于GOAP NPC的涌现逻辑产生额外变化(比如AI PMC攻击了SCAV,引起了不小的慌乱,甚至把锤哥引过去了,这对于你来说是个机会)。
我们在传统任务设计时会考虑RLD(理性关卡设计),换言之,用一种量化的方式去评估当前任务的难度,复杂程度,在心流体验上的强度。而基于目标导向任务和环境驱动型叙事所产生的流程,其体验的心流曲线则是由当前环境涌现的情境,和玩家基于当前情境,评估自身目标后所产生的行为来决定。
当然,对于设计师来说,他依然可以控制这个任务的整体难度,只不过这次考虑的角度需要更加宏观——不再只是单纯考虑任务动线和任务中的挑战元素,而是综合考虑整个地图的环境,AI的行为逻辑,地形对于玩家和AI行为的影响。在一些适当的时候,任务也可以主观的创造一些对于GOAP AI而言的吸引锚:比如从脚本的角度上,任务可以强制改变某些GOAP NPC的位置,或是创建一个接管区域,进入区域的GOAP NPC会被调整GOAL的优先级,用来刻意的实现某些表现。
当然,你也可以从Action下面的规则出发。比如如果你要表达某个任务区域里两方正在混战,但你又不希望GOAP AI在这个区域里主动攻击玩家,那么你可以在他们的警戒Action里把玩家单独抽成一个layer,并通过任务脚本指定某个区域的AI会屏蔽Player的Layer。这样AI就会在警戒状态时不索敌玩家,而如果玩家主动攻击这些AI,GOAP会将AI的状态切换为Combat,此时玩家又会成为被索敌的目标,这就不会让AI看起来特别的“傻”。
所以,这类型任务在设计上所要考虑的,其实是目标投放的节奏,对应环境的复杂程度,还有助推环境变化的方法。这也就是为什么我在前面提到,《塔科夫》的正式版做了如此复杂的地图锁,和基于任务推进的地图解锁机制——中心区和立交桥新区刚好是两个作为新手而言风险较低,地图结构较为简单,又同时能够感知到《塔科夫》这个游戏阵营关系的两张地图。而作为进度卡点的海关,海岸线,森林这三张图则给到玩家复杂环境的长期挑战,让玩家重新评估自身的情况,评估当前装备,寻找自己解决任务的方式。
而同样你也会发现,尽管不是搜打撤游戏的《天国拯救2》,作为前期你真正开始探索世界的流程,他的做法是——将你扒个精光,并给你设定一个很宏观的目标,让你自己通过探索环境。你会通过不断的探索和死亡威胁,意识到如何赚钱,周围有什么样的危险,有哪些发家致富的办法,地区又有哪些规则存在。
所以,总的来说,对于GOAP系统下的任务设计,一条可行的方法论是:
- 创造一个清晰的基于GOAP的NPC关系和阵营关系设计
- 一个迫使玩家迈出第一步的压力环境
- 基于投放节奏和玩家在世界中的体验进度解锁的,目标清晰但实现方式模糊的任务。
作为摆脱了传统以线性或脚本叙事的“手作工坊”式任务来说,这样也能一定程度上保证玩家叙事体验,而不是出现用GOAP系统硬凹传统脚本化/线性叙事,最后发现完全不适配,体验还不好的情况。