大家好，我是马克
我正在制作一款有关「磁铁」的游戏
首先，我这个视频系列的一大初衷
就是要真实、透明、全面的为你展示
自己亲自制作游戏是什么体验
而这某种程度意味着
我不可能只向你展示那些有趣、欢乐
适合做成视频的部分
比如为游戏机制打造原型
设计关卡
或者放出惊喜 DEMO
而且，就目前来看
游戏开发过程中，实际有大量的工作都称不上有趣
比如制作菜单
屏幕 HUD 界面
保存和读取数据
支持各种不同的控制器类型
同步选项
追踪进展
制作关卡过场，以及更多
这部分内容很少在开发者记录、或是纪录片中出现
因为说实话，它们很无聊
但总有人来做这部分内容吧
而在本游戏中，这个人则是……
额，好像是我自己啊 ?
开发之旅
那么，在本系列的上期视频中
我完全重制了自己的角色操控系统
其中就包括了为玩家提供更丰富的操控选项设置 :
比如让你在「按下按钮瞄准」和「按住按钮瞄准」之间选择
还有让玩家能够自由设置所有功能的键位
还有让玩家自由设置磁铁的颜色
这些选项对于单个的临时测试关卡来说运作良好
但如果我想让这些选项在整部游戏中都能通用
我就需要找点方法，在不同的关卡之间同步这些选项
让玩家在硬盘中保存和读取自己的选项设置
并为玩家们提供 UI，用来设置这些 ……「设置」
那么在研究了一阵子之后
这是我得出的成果 :
当你第一次启动游戏，进入主菜单时
我会生成一个「设置管理器」
这是一个包含了好几个脚本的隐形 Game Object
用来追踪玩家的设置，并将这些选项设置存储、读取在硬盘中
这个 Object 会被设置为「DontDestroyOnLoad」 加载新场景时不要破坏
这意味着，当玩家开始游戏时
主菜单界面会被从内存中删除，以一个关卡取代
但是，这个「设置管理器」会像个钉子户一样赖着不走
而因为它会停留在内存之中
这个新的关卡仍然能够找到设置管理器
然后轻松得问它问题
比如玩家角色可以问 :
「我现在应该使用低灵敏度的瞄准吗?」
然后磁铁可以问 :
「我现在应该变成什么颜色?」
而这个面板可以问 :
「我现在是否应该显示无障碍标志?」
简单说，我在这里所做的事是
将游戏的底层关卡逻辑，与实际的关卡设计内容拆分开来
现在想来，这是一目了然的设计
但我在 MVP 阶段完全忽略了这个方面
那时，每个关卡都有大量各自的复制粘贴代码
无论是流程存读档
还是关卡切换功能
甚至每一关都有独立的复制「暂停界面」，用来在游戏中使用
这非常不方便
让测试关卡运转缓慢
为我的 Hierarchy 增加了大量无意义的废物
它让选项的设置变得非常难以统一
在不同关卡之间追踪物品细节也非常困难
这个新系统就可就要聪明太多了
所以我决定多创建一些类似的隐形管理器
现在，你可以将一个关卡的名字发送给「过场管理器」
它会擦除现有的关卡，然后跳转到一个新的关卡
与它成对的还有这个「音乐管理器」
它会让暂时没做好的背景音乐随着关卡的载入而淡入淡出
还有「HUD 管理器」，负责在屏幕顶层绘制信息
比如教程提示、以及根据情况出现的按键提示图标
而且，它还会根据你的控制器类型自动变化
我还制作了一个「UI 管理器」，用来放置暂停菜单和选项菜单
我承认，目前它看起来丑到不行
我只是打算先专心打造基础
—— 未来会把它改好看的
与声音设计类似
UI 设计是未来马克的工作
是的我承认，似乎未来马克的工作开始越堆越多了
而我打算再制作一个额外的管理器
那么，在 MVP 中，游戏从第一关到第二关、再到第三关，以此类推
但我不认为，这样线性的关卡排布对解谜游戏来说是最好的
当然，有些解谜游戏是这样的，比如《传送门》和《inside》
但其他的，比如说
《时空幻境》
《史蒂夫的香肠卷》
还有《巴巴是你》
都有着更开放性的结构
你可以跳过关卡，不以固定顺序游玩
也可以在稍后回顾自己此前跳过了的谜题
我挺喜欢这种的
我不想因为玩家在某一个谜题上卡住了
就用巨大的空气墙绝情得挡住他们的进度
因此，我想在自己的游戏里引入这种非线性的关卡结构
而这是我的做法 :
在每一关中
你的目标都是找到、收集一把钥匙
我新做了一个「游戏进度管理器」
存储了一个记录游戏全部钥匙的列表
一旦你找到其中一把，它就会在列表中将它勾去，然后在硬盘上储存进度
我建造了一个很简单的枢纽关卡
其中放置了很多扇通往各个谜题的门
在末尾处，有一扇特殊的门
仅会在你收集到了一定数量的钥匙后才会解锁
而这个数量，我可以轻松的在今后根据平衡来调试
说到调试和平衡
我想要设计一种更方便的、允许我自己改变关卡排序的方式
帮助我通过玩家对谜题的难度反馈来塑造心流
所以，我让整个关卡的切换系统都基于关卡的文件名来跳转
每个关卡的名字都类似于「01 电梯 02」
前两位数表示了这个关卡所属的枢纽关卡的序号
而后两位数则表示了该关卡内部的钥匙拥有的序号
然后，所有相关的系统都只会读取关卡的名字
从中提取它们需要的 string
确认对应这个名字的关卡
而这意味着，我只需要修改关卡的文件名就可以改变它们的顺序
效率非常高
鉴于我们在聊效率的话题，那就顺便聊一聊工具
我在此前 MVP 中发现的另一个问题是
制作关卡、尤其是迭代调试它们时，体验非常的折磨
让我给你个例子 :
如果我想让这个电磁铁射程短一些、再把它改成红色
我需要调整 AreaEffector 的尺寸
调整光柱的视觉尺寸
移动它的粒子系统
减少其存在时间
改变粒子的颜色
改变光柱的颜色
改变 Sprite 的颜色
改变磁铁的图层
改变缓冲区域的标签
改变 AreaEffector 的碰撞体蒙版
你可以想象一下
游戏中的几乎每个机制都需要这套流程
就算我只是想把某个东西向上移动一个单位
或者是想要将一扇门的初始状态从关闭改为开启
由此我意识到，尽管 Unity 是一件制作游戏的工具
它不会直接帮忙「制作我的游戏」
—— 因为这是我的工作
我需要亲手制作这些工具和系统
允许我为自己独特的游戏生成相对应的内容
牢记这一点后
全新版本的电磁铁面板，在 Inspector 中多了一个简单的滑块高度调整工具
当我将滑块上下移动时
我前面提到过的那些相关变量也会自动据此进行调整
这些用于切换面板颜色、开关的按钮也是一样
简而言之，如果我游戏中的某样东西需要频繁的调整
而修改它们的方式则是一整套固定顺序的流程
我就会制作一些简单的脚本，帮助我轻松的一键修改
然后我为 MVP 中越来越多的物品制作了这种脚本
让它们用起来更加简单和效率
比如这个移动盒子 :
我现在用 Unity 的内置道具展示这些盒子的起始点和目的地
以及它会经过的路径
我还设置了一个独立窗口，用来存储游戏机制的预制件
这让我可以像玩《马里奥制造》一样，直接把物品拖拽进场景中
哦，制作 MVP 时，Unity 的 Event 系统也很困扰我
我说的并非是系统自身，它们很好用
这是它们运作的方式 :
比如在这个绿色按钮的脚本中
我让按钮被按下时「触发一个 Unity Event」
然后，在编辑器界面
Inspector 中会出现一个简洁的插槽
我可以从场景中把任意 Object 拖拽进来
从而运行那个 Object 上附带的函数
那么现在，当我按下这个绿色按钮
它会关闭这个电磁铁面板
对于解谜游戏来说非常好用
但当我需要从 Hierarchy 中找到目标的 Object 时，过程就很折磨了
我多么希望能有一个类似于 Photoshop 中的吸管的功能
允许我直接选取场景中的 Object
所以我滥用了自己的互联网声望
找了个比我聪明得多的人，让他完全按照我的描述做了个工具
非常好用，我时时刻刻都在用
我将这个 Unity 工具上传到了 GitHub 页面
你可以通过视频简介下载
那么现在，我已经制作了一堆工具
应该能让我设计谜题的过程更加简单，有效率一些
我决定先做一个谜题，测试一下工具
是的没错，效率确实大幅提高了
但这个过程中还有一些恼人的瓶颈和细节
于是我修好它们，为了测试又做了一个关卡
然后又做了一个
我紧接着又做了个关卡，才意识到……
我现在有一整套系统级的关卡管理器在后台运行着
我做了一个完整的枢纽结构关卡
我还做了四五个全新的谜题
我是不是无意中做出了部游戏啊 ?
惊了 !
这太乐了，我一开始根本不打算为我的游戏再做一部新的 DEMO
但我的硬盘上却多出了一部几乎整装待发的新游戏
我认为这很好地说明了，效率工具对于游戏制作有多重要
它们让你多快好省的制作游戏
甚至你在反应过来前就已经做好了
所以我认为每个人都值得
在游戏制作的一开始花费一些额外的力气和汗水
因为它会帮你解决大量时间、精力
让你在游戏开发的主要阶段中顺风顺水
无论如何，这都棒极了
因为要知道，在 MVP 阶段
我收到了大量值得注意的负面反馈
大量玩家对这部游戏不满意的地方 :
比如角色的操控手感极其的糟糕
游戏的视觉语言有大量恼人的不统一之处
平台跳跃和解密玩法的混搭让一些玩家烦恼于正确的过关思路
大部分谜题都太短，缺少恍然大悟的「觉悟时刻」
大量的关卡都杂乱且 BUG 满天飞
你需要干等着让物品完成运动循环
而且这部游戏并不能真的让人感受到它以磁铁为核心的机制
那么，在这部新 DEMO，《无名磁铁游戏》 2.0 中
我有机会修改此前所有的那些问题
看看人们现在如何评价这部游戏
我希望你一会能够立刻前往 itch.io
玩玩这部全新的……「惊喜 DEMO」
是的，我真香了
这次并非 Patreon 独占，大家都可以体验
它支持 PC 和 Mac 平台
它支持键盘鼠标操作
你也可以用各种型号的手柄玩
请一定尝试一下
并在视频、itch.io 的评论区中给我一些反馈
下一期我会谈谈这新一轮的反馈
然后探讨一下游戏未来的方向
非常感谢你的观看
祝你享受这部游戏
我们下期再见……
哦，结束之前
我要说 GMTK Game Jam 2022 年回归了
它会在 7 月 15 号开始
所以当你在 itch.io 下游戏时
也别忘了顺便报名参赛 GameJam
我们不见不散