top of page
作家相片Junce Wang

开发日志 #0 - 代号:Shinigami

已更新:2023年1月13日

两周前,我开始为我的学业课程开发一个动作游戏。这是它的第一篇开发日志,讲述项目的基础信息,以及这两周开发过程中发生的种种事情,也希望能为我后续的开发提供进一步的动力。


以下所有工作都由我自己完成,除了我明确声明由他人贡献的部分或使用了第三方资产的部分。


Demo 视频


总之,先放一段目前成果的视频:


项目背景


我是一名犹他大学娱乐艺术与工程硕士项目(EAE)的学生,学习专业是技术美术方向,但我的本职是技术策划。这个项目是这个硕士项目中为期两学期的课程的“高级游戏工作室”的课程项目,由我一个人主导设计和开发,同时有一些其他 EAE 的学生会对本项目进行贡献。


这个项目在 10 月 18 号正式开始,预计在 2023 年 4 月或 5 月结束它作为一个课业项目的周期。


项目愿景


首先,它必须是动作游戏。其次,它必须是手感好的动作游戏... 同时考虑开发周期和开发可行性,我把这个游戏的范围定为“一场 3A 质量级别的惊心动魄的 BOSS 战”。我的期望是还原战神(2018)中,奎托斯与女武神王希格露恩的战斗的体验。


参考视频:

(b站这个视频嵌入代码好像画质强制最低,调了也没用,得跳转到b站去看。目前还没找到什么好的替代方式)


顺带一提,我曾经挑战战神难度的女武神王成功了,但是当时花了我两个晚上...


战斗设计


战神中对战女武神王的这场 BOSS 战,是一场非常紧张刺激的“反应式”战斗,尽管奎托斯有各种丰富的技能和连招,但是 BOSS 给玩家的输出窗口并不多,她在受到一定量的攻击后会强制脱离玩家的控制,不会因为玩家能打出一套帅气的长连招就被一直控制。这场 BOSS 战中,玩家的主要体验是理解 BOSS 各种丰富的招式并对其做出正确的反应,然后从 BOSS 的硬直窗口中进行输出。仅仅从制胜的目的来说,玩家只会最基础的连招即可,并不影响完整战斗的体验。当然,战神中部分玩家的动作招式有特殊的功能,可以作为面对 BOSS 招式时的特别反应方式,但这部分属于进阶玩法,并不是基础战斗体验成立中的必备要素。


因此,我对这个项目的战斗设计,倾向的重点在以下几项:

  1. 玩家基础连招:有一套看起来、用起来帅气实用的连招即可,不需要复杂。

  2. 玩家少量特殊招式:卢恩符文或斯达巴之怒,这样的招式在基础战斗体验中虽然不是必要的,但是对玩家战斗过程的情绪调节至关重要,玩家不能只有简单的基础连招,只要有一两个特殊的招式,就可以对玩家情绪的影响产生质变。

  3. 玩家丰富的反应动作:四方向闪避、格挡、精准弹反、拆防、背身...玩家要有多种不一样的反应动作,让玩家面对 BOSS 的不同招式时,有足够的抉择空间。

  4. 基础的伤害和受击反馈系统:因为并不打算制作战神中很复杂的 RPG 系统,因此基本上只有简单的伤害计算和受击反馈。

  5. BOSS 丰富的招式和合理的 AI 设计:BOSS 的招式数量对战斗体验的丰富度至关重要,必须制作出足够多的 BOSS 招式,这样才不会让玩家感觉无聊。以希格露恩为例,她有大约 15 个不同的招式,包括地面、空中、投掷物等类型。我的 BOSS 可能也至少需要三种大类的招式分类,希望至少有 9 ~ 12 个招式。同时,BOSS 也需要一个合理的 AI 设计,让 BOSS 能用出合适的招式让玩家进行反应,以及进行招式之间的连招。说实话这部分我相信是工作的大头,而且我也不是很熟悉,这将会是之后我最花时间的部分。

  6. 快节奏:动作速度较快、招式设计中有多次打击、打断操作判定宽松等等... 这部分主要是希望带给玩家足够的压力的方式。由于开发成本限制,我不太可能在招式的丰富度上做出非常大的突破,因此需要用快节奏的体验来弥补这部分缺陷。玩家方面的标准,是利维坦之斧的攻击速度。BOSS 动作的节奏应该比玩家端更快。这部分体验上,如果我搞不清楚的的地方,大概会选择复刻战神吧。

  7. 手感和体验:3C、VFX、SFX、按键缓存、多方向受击动画、锁定系统、攻击动作修正、慢动作、处决、特殊 UI 表现... 这些是一些不好归类,但是对游戏品质有同样巨大影响的部分。在满足上面几条设计目的的前提下,打磨这些部分对战斗体验有量变到质变的提升。项目后期的时候一定要留一些时间给这部分进行打磨,甚至值得为此砍掉前几条做不完的内容。

此外,还有一条完全选做的内容:Roguelike。每次挑战完 BOSS 之后,玩家可以为自己和 BOSS 选择随机的修饰器,在下一场战斗时玩家和 BOSS 会有不同的加成 - 例如,玩家弹反成功后下一次特殊招式威力x1.5 / BOSS 某个原本不能破防的招式可以破防。 这是一种不需要额外资产,扩展游戏可重复游玩性的方式,这对于一个完整的游戏项目来说是值得的。不过对于我想营造的战斗体验,这一点并不是必须的。如果项目后期没有足够的时间,或者这个系统制作起来难度过高,我完全可能选择放弃这部分。


概念和美术


这个项目原本有一个 “死神 vs 异常不死” 的主题,甚至为此编写了一个虚构神话,这也是这个项目代号的来源。但是考虑这种具体的概念还是更适合一场冒险体验,仅仅一场 BOSS 战不足以表现这个宏大的概念,以及出于来自合作的艺术家的建议,最终可能会选择一种完全不一样的概念设计和美术风格。这部分目前还有待确定。


不过出于记录目的,我还是把我一开始写的虚构神话放上来吧:

生命之契约

伟大意志在创造世界之初,订下生命之契约,对于活着的时候意义非凡的生命,这样的人死后会被奉入英灵殿,其他人死后则自动进入尘世轮回。

死神是伟大意志的使者,负责确保生命之契约的执行。他们负责收割英灵候补的生命,用荣誉决斗的方式,赐予他们命定之死,之后迎接他们前往英灵殿;同时他们也负责收割本应死亡却还未死亡的灵魂,解放他们,让他们进入尘世轮回。

那时的人们,尽管笨拙且弱小,但仍然努力地活着每一天,积极地期待着死神降临于自己面前,为自己赐予命定之死。

后来,在伟大意志创造世界后的第 738043 天,祂抛弃了这个世界。从此,无人再知晓死后会发生什么。死神们也从世界上销声匿迹。

死亡后的未知,为人类降下了无与伦比的恐惧,人们虔诚地向永恒光明祈祷,希望赐予人类面对死亡的勇气。日复一日,不知道多少代人的努力之后,从这份愿望中诞生的,是一只身缠永不熄灭烈火的不死鸟。

不死鸟将自己的羽毛洒向大地,羽毛的赐福赋予了人们永生。但从此以后,再也没有新的生命降生。

失去死亡后的世界里,一些人害怕伟大意志在某一天会回归,重新让死亡遍布这片大地,因此他们制作了大量的弑神兵器。

但这些兵器在弑神之前,先被用于了人类之间的战争。而没有死亡的战争,导致的结果就是许多人从此成为了永恒的奴隶,或被痛苦地囚禁为永久的行尸走肉。

不死鸟对此视而不见,永生的赐福仍然平等地庇佑着每一个人。

这时,出现了一些人,他们认为面对死亡的勇气被扭曲了,永生不是赐福而是一种诅咒,他们誓要把死亡带回这个世界。

无数的人开始挑战不死鸟,但不死鸟是不死的。杀不死祂,永生就仍然存在。

有一小群人重新拾起了对伟大意志的信仰,他们虔诚地向伟大意志祈祷,希望祂重新回到这片大陆,为生命和死亡带来秩序。

不知过了多久,一位死神在这个荒诞的世界中苏醒了。

但她也不知道伟大意志离开之后的去处。

她只知道,终结不死鸟的永生诅咒,是生命之契约赋予她的使命。


开发环境


终于进入到实际的开发介绍了!这个项目基于 Unreal Engine 5 游戏引擎,使用 Maya 作为主要的 DCC 工具。


蓝图 vs C++


说到 Unreal,那必然会有蓝图和 C++ 的争论。我目前在采用纯蓝图开发,并且没有使用什么很重形的框架(例如 GAS),这么做的原因主要是出于开发效率。我之前的工作经历让我对蓝图有一定程度的熟悉,可以让我的时间专注在实现设计,而不是查找不熟悉的C++ API上。

截至目前为止,蓝图+第三方插件基本上可以满足我的开发需求。我唯一找到的蓝图中无法很优雅地实现的功能,就是面向对象语言中,“protected”修饰符的变量,蓝图中只能对函数设置为 protected,变量只能 public 或 private,在涉及到需要对变量进行 instance editing 的时候,没有 protected 修饰符是一件比较麻烦的事情,因为 private 的变量无法在子类中进行实例编辑,而公开变量会暴露不必要的权限给外部类。最终的解决方案是,把原始变量设置为私有,创建一个公开并 instanced editable 的变量,在构造函数里,把 instanced editable 变量的值赋值给原始变量。除此以外,我目前对蓝图的开发效率没有任何不满。

至于没有使用 GAS 等框架的原因,其一是因为这些框架很多是基于 C++ 的,更主要的原因是我想从零开始制作自己的战斗系统框架,这样我才能学习这之中的思想,理解各个系统和功能之间的关系。


一些推荐的 Unreal Engine 插件


以下是一些我使用的插件,它们对我的开发效率有巨大的提升。我推荐任何以蓝图为主要开发工具的人,尝试一下这些插件(在 UE 商城里搜索它们的名字可以找到):

  1. Advanced Control Flow: multi-branch 之类的节点,可以帮你精简大量的 branch 节点。

  2. AutoSizeComments: 和 Blueprint Assist 是捆绑的,详见 Blueprint Assist。

  3. Blueprint Assist: 强烈强烈强烈推荐!!!!!每一个蓝图开发者几乎必备的插件!!!这个插件对蓝图可读性和可维护性的提升是巨大的,可以把你纷乱复杂的连线变成清晰可读的格式。如果没有这个插件,我甚至可能会放弃蓝图开发。它对开发效率的提升完全对得起它的价格,非常感谢这个插件的开发者!

  4. Debug Funtion Library: 提供了格式化 Log、箭头绘制等原始 debug 功能的封装节点,以及全局的 Debug 功能控制,是很便捷的库。和其他插件不一样的是,快捷键设置在 Project Settings 里,Editor Settings 里找不到,如果不注意的话会和其他插件的快捷键冲突。唯一问题是作为付费插件,Debug 节点的插入对蓝图是侵入性的,多人合作时可能出问题。可以试着用它的 Lite 版。

  5. MORT: Multiple-Objects Renaming Tool,这个插件帮助批量重命名资产文件,非常好用,我以前就在用。

  6. Operation Extention for Blueprint Nodes: 包括一些逻辑、运算、排序、字符串处理等额外的节点,以及很好用的 Make Literal 节点。不是必备,但是有这些节点会很便捷。

还有一些其他的插件,我个人正在使用,但是还没有得出是否值得推荐的结论。以后有更多推荐的插件的时候,我会更新在后续的 devlog 里。说实话,给引擎装开发效率插件,就像给游戏安装 mod 一样,可以定制自己需要的功能真的是太爽了。我以后也想学学 UE 编辑器插件开发,给自己开发一些有需求但是目前还没人做的插件。


开发过程和功能


其实真要讲到这一步的时候,我目前反而还没啥特别好讲的地方... 我这两周主要在跟随以下这门在线课程学习(以及花时间挑选上面那些插件!):



目前学习到第 14 课,Hit Detection。不过我在跟着做的过程中,根据我自己的需求,做了一些功能的修改或重新抽象,也使用了不同的第三方资产。


比较重要的改动,第一点是,我给攻击动作的连招也加入了根据输入修改人物方向的动画通知,这样让玩家可以在连招过程中调整自己的动作方向,这对手感的改善是巨大的。第二点,是让角色播放受击动画前,转向受到攻击的方向,这样便可以让受击动画的 root motion 表现出“被击退”的感觉。后续当然打算进一步优化受击表现,包括多方向受击动画,一些随机的 additive 动画等。


顺带一提,没有把当前的动画应用到 UE5 Mannequin 上,是因为这套动画是基于 UE4 骨骼的,而且对骨骼的使用方式很不标准,导致重定向到 UE5 Mannequin 上有比较大的问题,需要后续在 DCC 工具中修正。


目前完成的功能有:

  • 基础武器功能 - 拔刀 / 收刀(混合 locomotion)

  • 可拾取物品

  • 不同武器的连招动画 / locomotion

  • 连招打断(包括按键缓存、判定窗口时机优化)

  • 带方向的回避

  • 命中判定和基础受击

  • 音效、视觉特效等观感提升

具体的展示,正如本文开头的视频的一样。


接下来的计划


开发:

下一步是继续跟着教学课程,尽快把基础战斗系统做完,然后开始认真研究 AI 相关的问题。


设计:

这部分还是打算先放一放,开发完所有框架后,以此为限制进行具体的战斗技能设计。


角色:

目前为止,我正在和其他的艺术家进行沟通协作。过一段时间说不定可以公布一些概念设计。预计是两周之内完成主角和 BOSS 的角色设计,然后开始进行人物建模。


场景:

这两周可能也会进行一些场景设计的工作。因为只有一场 BOSS 战,场景工作量也不会很多,说不定这两周直接就把最终场景的成品做完了呢 hhh


动画:

这个项目必然会用到很多第三方动画资产。不过我这学期也有参与一门动作捕捉的课程,很可能会规划一下使用动作捕捉产出资产的计划。


特效:

这部分我应该会大量使用第三方资产,也在试图寻找是否有可以合作的特效艺术家。


音效:

有愿意参与这个项目的音频设计师,不过可能不一定会在项目前期就有大量工作。这部分内容到后期再讨论具体的工作把。

195 次查看0 則留言

Comments


bottom of page