【随笔】unity实现动态对话系统

什么是动态对话系统?

在《上古卷轴》中,玩家会无数次从不同的卫兵的口中听到相同的一句著名台词:“我曾经也和你一样是位冒险家,直到我的膝盖中了一箭”;在《巫师3:狂猎》中,“血腥男爵”上一秒还在声泪俱下苦苦哀求玩家去拯救他妻女,下一秒便换上油腻的笑容,“来局昆特牌吧,我打赌你赢不了我!”这是传统的对话系统不可避免会遇到的问题,而这个问题的答案就是动态对话系统。动态对话系统能够根据多方面因素使得npc的台词“更合理”,从而减少对话“穿帮”的可能,以此增强玩家的代入感。

将游戏接入大语言模型来构建动态对话系统或许是个好办法,尽管这个办法还并不成熟。与此同时我们注意到,已经有一些游戏通过相对简单的架构走在了实现动态对话系统的路上。本文将以《哈迪斯》为例,分析、拆解动态对话系统的实现。

《哈迪斯》中的动态对话系统

《哈迪斯》是一款肉鸽游戏,讲述了冥界的王子一次次逃离故乡的故事。游戏中有大量的npc,由于其肉鸽属性,玩家会与这些npc反复见面。《哈迪斯》的制作组Supergaint借助动态对话系统,使得玩家每一次遇到npc时,几乎都能得到新的对话。例如,boss会对你携带的新武器评头论足,或者是总结上次被你战胜的失败经验;npc会赞扬你无伤过关的壮举,或者质疑你放弃强化的决策。剧情进度、角色好感度、过关时间、过关战损、装备、强化构筑、祝福的种类与稀有度……几乎你能想到的一切都会对你与npc之间的对话产生影响,这给予了玩家一种私密的个人化体验,肉鸽闯关不再是千篇一律的流程重复,而是独属于你的个人冒险。

那么,我们该如何实现《哈迪斯》中教科书般的动态对话系统呢?首先,毋庸置疑的,我们需要大量的文本提供支撑。对于一款动作肉鸽游戏来说,这是令人震撼的。其次,我们需要合理的架构来供文本填充。

动态对话系统的架构

条件判断

想象我们的游戏中的商店老板是个势利眼。每当玩家控制角色走进商店,他都要对玩家的衣着审视一番:如果角色衣着华贵,老板会热情迎接;如果角色衣着寒酸,老板则爱搭不理。那么很容易的,我们只需要以玩家装备的价值进行条件判断,再根据结果让老板作出不同反应即可。我们可以说,条件判断是动态对话系统最基础的一环。

标签化

然而,目前我们的商店老板还不够“智能”——试想玩家身着华服接受老板的招待后,出门换上一套破烂再返回商店,老板立刻摆起一副臭脸。我们想要让老板“记住”玩家并对玩家建立一个“印象”,玩家的每一次到访老板都要根据这一印象来做出不同的反应。或许你会想到使用好感度来实现,然而遗憾的是,好感度系统并不能满足我们的需求。好感度只记录当前npc对玩家的好感数值,忽略了好感度的变化过程与变化原因,而动态对话系统恰恰要根据变化的过程与原因来决定对话内容。回到刚才的例子,当玩家穿着破衣服第一次走入商店,我们可以为老板添加一个【第一印象-贫穷】的标签;当玩家换上昂贵的衣服再次回到商店,对话系统检测到“玩家当前装备价值高”与“老板拥有【第一印象-富有】标签”这两个条件同时存在,则让老板展现极其震惊的反应,同时更改标签或添加新标签。

优先级

当npc与玩家角色偶遇时,一句必要的寒暄自然是有礼貌的表现;然而,如果当前存在该npc发布的任务或委托,我们应当优先让npc表现出对任务进度的关心。优先级应当使用层级架构,不同层级具有不同的优先度,而层级之下的具体对话也具有优先度——不妨把这个由许多条对话组成的多重优先级系统成为一个“对话块”。让我们通过一个例子来说明:玩家遇到了一个npc,我们想要在二者之间触发一段对话。当对话事件开始时,程序会找到该npc拥有的对话块,从具有最高优先度的层级(这里我们称其为主线剧情层级)开始,以优先级顺序检索该层级下所有子对话,通过标签化的条件判断找到一个可用对话并输出;如果该层级下没有可用对话,则继续检索支线剧情层级、日常对话层级等等。

不!选择肢……

《哈迪斯》中角色之间的对话是不存在选择肢的。如果我们试图在当前对话系统的基础上引入选择肢,可想而知的是,这将成倍增加本就已经非常巨大的文本量。让我们把这个令人头疼的问题抛给文案策划,只考虑程序层面的解决方案:首先,我们需要将对话选项视为一个新的对话块(或者更贴切一些,选项块),区别在于,选项块并不需要复杂的层级、优先级架构,我们只需要通过标签化的条件判断检索出所有可用的选项即可;接着,对于每一个选项,我们都要建立一个独立的对话块,当玩家选择了某项选项后,用我们处理一般对话的方式处理接下来的对话即可;最后,我们将对话块与选项块进行合理链接,确保对话-对话引出选项-选择选项-继续对话这一流程的顺利进行。(一个比较明智的决策是,不要把从属于选项的对话块设计的过于复杂。)

结语

笔者在设计文字冒险游戏的过程中遇到了一些困难,经过资料查阅与思考后写下此文。特别感谢油管大佬
People Make Games
的视频The System Behind Hades’ Astounding Dialogue,为本文提供了宝贵的思路。


【随笔】unity实现动态对话系统
http://example.com/2024/12/07/【随笔】unity实现动态对话系统/
作者
Solitude
发布于
2024年12月7日
许可协议