当前位置:首页 > 文库 > 个人 > 职场有道 > 过程化内容生成:场景生成、敌人、道具生成

过程化内容生成:场景生成、敌人、道具生成

 文/扑来树袋熊

  一、过程化场景生成

  玩家的热情如此之强,恰当的设计总是能卖好卖座,玩家的热情又是如此容易消散,精心设计的内容往往以超出想象的速度被玩家消耗殆尽。部分游戏选择了另外一个方向:程序动态生成游戏内容,这样游戏的可重玩性就得到一定延长。

  说白了过程化生成的内容还是需要对关卡进行设计,只不过这种设计不是针对整个关卡而是创建关卡里可复用的元件,然后交由程序在运行时利用这些元件拼装关卡。游戏的场景系统和战斗系统种类繁多,场景设计的不同导致过程化场景生成不可能做到通用化。是顶视还是侧视,2D 还是 3D,是否包含狭长过道这些因素都影响基本关卡元件的设计、组装,以及相关系统的编写。比如侧视游戏的关卡,元件间的衔接要保证玩家一定可以从前一个元件移动(行走、助跑或者攀爬)到后一个,而顶视关卡就不需要考虑这个问题。关卡游戏性取决于元件的丰富性,更取决于生成程序的合理性。

  比如一个由很多小房间和过道组成的关卡(可自行脑补暗黑、银河战士这样的关卡拓扑结构),用4种类型的元件抽象:基础标准元件,过渡枢纽元件,高潮 BOSS 元件,以及额外奖励元件。明显 BOSS 和奖励元件要避免出现过多,又要尽量避免无意义的过渡枢纽。好的关卡可以让玩家兴奋的打一段再稍做梳理为下一阶段的奋战做准备。大体上来说,也许是一个:1. 整关时长、难度规划 -> 2. 挑选一个适合当前上下文的元件设立在关卡中 -> 3. 计算一定范围内关卡上下文数据,并跳转到 2 的流程;也许单纯的纯随机并保证元件间在空间逻辑上的正确性就能很好的满足需求……嗯场景部分不太可能也没必要做出通用解决策略,我也不打算对那么多常见情况一一分析了。

  关于技巧方面还是建议多搜搜,比如 关于程序生成关卡的制作解析 和 在游戏中使用程序生成内容的5大诀窍 翻来翻去的慢慢也就会有自己的解决方案。

  二、过程化敌人、道具生成

  聊完过程化场景生成,接着来谈敌人、道具生成,在真实的游戏开发过程中这二者是有关联的,比如某个场景出怪点也许会对敌人种类和难度做限制。就像上篇说过的,不同游戏的场景系统差异很大,所以这篇不涉及和场景关联的话题,来谈一谈可通用的一些过程化敌人、道具生成的思路。

  多年前我翻译过一篇阀门公司的 PPT 《漫谈求生之路的 AI 系统》,求生之路采用的根据玩家心理状态动态调整出怪策略的机制不禁让人眼前一亮。对于过程化敌人、道具生成,设计师想要的最终体验是关卡不会太过简单,也不至于太难,而是始终处于最理想的心流状态。

  不妨从宏观到微观,设定一套自顶向下的策略。就像行为树这样的决策解决方案,层次化是有效的问题解决步骤。对象生成的层次我从可控量的角度切入,得到以下层次,

  可控量及层次

  1. 总的胜负均衡。玩家从第一次到最后一次游玩的胜负均衡。

  2. 单局难度曲线。玩家从使用一个角色开始游戏到这个角色死亡的难度均衡。

  3. 单关难度曲线。玩家操纵角色开始一个关卡到结束一个关卡的难度均衡。

  4. 生成对象类型及数据(包括不生成)。生成敌人、道具等对象,不难想到游戏内的每一点主动或被动变化都会改变游戏对玩家有利/有害的程度(即难度系数),我们的目标是让这个难度系数尽量落在期望难度曲线上。应当注意的是难度曲线对对象生成的影响只在一个大趋势上,如果完全遵照曲线反馈生成对象那么每次游戏都变成了每个玩家都刚好努力一下就可以通过,基本上死不了也没有砍瓜割草的情况。游戏提供的是内容和机制,玩家的技巧水平是体验难易度的主要因素,过程化内容生成说白了最大的目的是让玩家的体验有某种不确定性而已。

  5. 对象难度系数。每个生成的对象都可以量化计算出其难度系数,如敌人血量多攻击强则难,反之则易。如果道具可以被玩家角色亦可被敌人取得(比如马里奥赛车里的道具谁都能吃),则生成道具这一动作尚没有影响难度系数,而道具被某一方取得这一动作必然在对玩家有益和对玩家有害中取其一;更常见的设定是道具只能被玩家吃掉且大多数情况下有益于玩家,那么道具生成、掉落这一行为本身可认为是降低难度系数的。道具的难度计算比敌人还要复杂一点,敌人的影响范围只在一个关卡内,但有些 RPG 要素的掉落道具是会影响到 单局难度曲线 的。

  根据上面的设计,不难想出可行的运行流程,

  对象生成过程

  1. 对模板元件按难度排序。把诸如敌人种类,数值浮动区间等因素量化,并做排序以便生成时挑选。需考虑也许游戏包含风格设定,对象会按“草地”、“森林”、“山地”等风格分成几套。如果不同风格的对象只是美术资源的不同就比较简单,行为数值上相同的敌人可以归约为一种。不管怎样,游戏敌人配置都应分成两部分,美术资源,以及行为和数值,生成的时候按这两部分配置装配生成对象。

  2. 计算当前关卡难度曲线。由玩家自主的行为和非玩家自主的行为(如对象生成和对象的行为)构成。

  3. 根据关卡难度曲线和当前局面死亡风险计算下一周期期望难度系数。

  4. 挑选最接近难度系数的内容。从已排序的模板元件中挑选合适的内容。

  5. 生成挑选出的内容。按照美术资源,行为模式和数值配置生成内容。

  6. 根据玩家反馈计算死亡风险。上文指出难度曲线只影响一小部分趋势,因此像玩家血量变化这种行为应该弱化,毕竟死亡和碾压也是心流体验的一部分。

  7. 重复到 3。直到一关结束。

  至此过程化敌人、道具生成就介绍完了。需要注意的是游戏有不同的道具掉落、死亡等机制,如传统 RPG 装备可以影响整个游戏进程,roguelike 死亡后一切都要重来,因此哪些量化值会按哪种权重影响游戏进程,过程化生成会如何反馈到游戏体验中还需具体问题具体分析。希望在这篇抛砖之文的影响下能出现有趣的过程化生成游戏。