这是什么?

  • 我的第一款游戏即将发布。和大多数走过这条路的人一样,我身后也留下了一堆其他游戏、原型和迭代的"坟墓",甚至我即将发布的这款游戏,这些年来也在5个不同的引擎中构建过(纯Lua,然后GameMaker、Construct、Unity、Love2D和Haxe)。我积累了大量与我过去所谓的"游戏开发"无关的最佳实践。
  • 这些最佳实践(及其可复用代码)现在基本上构成了我项目模板的基础。下面只是这些最佳实践的高层次概述。
  • 我不是天才,很多地方我可能都是错的(除了关于可重新映射控制的部分)。
  • 但是,有这样一份清单,在我项目逐渐成熟时会是一份很方便的检查表,所以我把它发在这里,希望能帮到其他人。

清单

选项访问

  • 尽可能在游戏中暴露所有选项设置。玩家要跳出游戏重新加载才能启用/禁用或切换基本功能,这非常麻烦。如果可能的话,把它放在暂停菜单里。

视频选项

  • 你需要支持全屏、无边框窗口模式和窗口模式,除非你的设计或目标平台明确排除了这些。如果你的目标包含PC,请支持这些模式。
  • 分辨率切换
  • 你需要支持尽可能多、且实际可行的分辨率和宽高比,包括超宽屏支持。你最终必须决定什么是"可能且实际可行的"。
  • 伽马支持 —— 你需要给玩家调整整体亮度的方式。显示器和环境差异巨大,几乎不可能创建一个不遗漏任何人的默认值。所以让它可调节。
  • 性能和特效 —— 即使你的游戏在老硬件上也能轻松达到250帧,玩家仍然可能出于某些原因希望或需要禁用特定功能。
  • 对于每一大类图形特效,让它们可以被禁用。抗锯齿、HDR、泛光、动态模糊、各向异性等……都应该能开关。要明白,这些不仅是性能功能,更是无障碍功能。
  • 垂直同步需要有独立的开关。有人喜欢,有人讨厌,而且他们都不会改变。
  • 如果这些特效叠加会产生明显的性能变化,创建性能基准模式。高画质和低画质模式对很多人来说已经足够。
  • 给玩家一种在游戏内测试的方式:FPS计数器、基准测试工具之类的。鲁棒性应根据你游戏输出的复杂度而变化。
  • 特效移除 —— 没错,我们都看过那些关于屏幕震动、打击停顿、游戏手感与反馈的视频,它们通常都很棒。但对一些玩家来说,这些是无障碍的障碍。
  • 如果游戏中的视觉效果并非游戏玩法绝对必需,就做一个开关来禁用它。

音频选项

  • 将每个主要声道分离到不同的音量滑块
  • 总音量
  • 音乐
  • 音效 —— 考虑是否需要进一步细分。对于我的传统肉鸽游戏,我为脚步声单独设置了一个音量滑块。
  • 环境音
  • 界面音效
  • 如果能力允许,支持不同的输出格式 —— 环绕声、耳机等……
  • 基础音量滑块之外的音频设置经常被遗漏。我目前发布的游戏有一个重要的音频部分,这真的教会了我在这方面下功夫。我甚至为玩家内置了一个游戏内均衡器来调整声音。

控制选项

  • 这算是我在设计上比较在意的一点,所以请原谅我对此有强烈的个人观点。实现起来并不简单,但也并非什么高深莫测的东西。
  • 所有输入方式下的每个控制都应该可以重新映射
  • 抽象化输入层对于支持多种输入方式来说已经是相当必要的,重新映射只是再往前迈一小步。老实说,我无法想象现在的游戏没有这个功能,但实际上这种情况非常普遍。
  • 尽可能支持更多的输入方式 —— 不是所有游戏都能支持所有输入方式
  • 对我来说,在大多数项目中意味着以下支持:
  • 手柄 —— 我通常会优先考虑这一点。通用行为是必须的,特定手柄功能则是锦上添花。
  • 键盘和鼠标
  • 仅键盘
  • 仅鼠标
  • 后两种是关于无障碍的。它们通常需要稍微调整才能可行,但对那些只能以此作为游玩方式的人来说,你付出的额外努力对他们意义重大。

持久化与存档

  • 按设备保存配置设置,而不是按用户。这对那些会在PC和Steam Deck之间切换游玩的人很重要。我知道这个比例不大,但无论如何,这仍然是一个很好的最佳实践。
  • 玩家的存档应该稳定、错误安全(尽可能实用),并且能在需要时触发保存。对我来说,这是我默认项目暂停菜单的一部分。
  • 我知道有很多游戏范式不允许这样做。我理解。但在移除这个功能之前,请确保你知道自己为什么要这么做。不要让缺乏合理的存档选项成为替代创造有意义挑战的借口。
  • 真正的暂停 —— 除非有非常实际的理由不实现真正的暂停(例如多人游戏),否则暂停就该做到暂停——它应该停止所有游戏交互。把它放在主循环中,保持不动。
  • 让玩家可以轻松清除所有数据并重新开始 —— 不仅仅是另一个存档位,完整地重置配置到默认状态通常非常有用。

帮助选项

  • 错误处理
  • 当游戏崩溃时 —— 它肯定会崩溃 —— 让玩家能轻松获得帮助。一个健壮的崩溃处理器,将任何错误数据打包给玩家,并提供自动发送或简单的操作说明,能帮上大忙。哪怕只是一个mailto链接也能帮助你将数据收到。
  • 在崩溃体验中添加一个玩家备注框,但要假设他们不会用。
  • 如果你的游戏很大程度上依赖存档来记录进度,确保向玩家显示最后一次存档的时间/日期,让他们知道什么已保存什么未保存。
  • 记住,没人会看手册,他们都跳过教程,跳过对话。为玩家提供在游戏内(例如暂停菜单)了解游戏功能的方式,会非常有帮助。我正在做的传统肉鸽游戏有一个完整的百科全书,列出了各个生物群系、生长什么、有什么怪物栖息等等……它还详细解释了游戏机制、怪物细节,以及一个实时更新器,显示玩家遇到过的NPC在哪里被发现。
  • 每款游戏都不同,大多数不需要百科全书式的处理,但小事很重要。在我的肉鸽双摇杆游戏的暂停菜单中,会显示当前屏幕上的怪物以及它们的能力。我只是假设玩家在看到这些信息时都会跳过。