第一课:Metrics 与 Blockout
这一单元先不碰“漂亮关卡”,也不碰剧情。目标非常单纯:
建立 OffMap 自己的空间尺度感。
你以后画门、走廊、窗口、掩体、平台、洞口,如果连“多大才舒服”都没有直觉,后面的关卡设计会一直飘。
第一单元:Metrics 与 Blockout
一、这节课最后你应该得到什么
完成以后,你们项目里应该多出一个专门测试尺度的场景:
levels/
level_design_gym/
metrics_zoo.tscn
它不是正式关卡。
它是一张永久保留的“尺度实验室”。
以后改:
- 玩家速度
- 跳跃
- 相机距离
- 碰撞体
- 蹲伏
- 滑铲
- 玩家尺寸
- 多人角色
都可以回来这里重新测试。
二、第一件要理解的事:Metrics 不是建筑尺寸表
比如我们最后可能记录:
普通门宽:1.8 m
舒适走廊:3.2 m
窄走廊:2.0 m
普通掩体:1.1 m
但这些数字本身没有价值。
真正有价值的是:
1.8 米的门,在 OffMap 当前角色速度、碰撞体和第三人称镜头下,感觉怎样?
所以 Metrics 实际是在记录:
空间尺寸
×
玩家能力
×
摄像机
×
移动手感
=
玩家感受到的空间
同样一个 2 米走廊:
第一人称可能:
很正常。
第三人称可能:
有点挤。
第三人称 + 两个玩家:
怎么全是屁股。
第三人称 + 战斗:
镜头开始疯狂撞墙。
所以我们不是在寻找:
“正确尺寸。”
而是在寻找:
不同体验对应的大概尺寸范围。
三、今天不要先做房间
我们先做一条很丑的“测试跑道”。
大概像这样:
Spawn
↓
[门宽测试]
↓
[走廊宽度测试]
↓
[高度测试]
↓
[跳跃距离测试]
↓
[平台 / 坠落测试]
↓
[窗口 / 掩体测试]
↓
[小房间 / 大房间测试]
所有东西:
灰色方块。
不要材质。
不要灯光氛围。
不要装饰。
四、第一站:门宽测试
先做 5 个门。
例如:
A B C D E
0.8m 1.2m 1.6m 2.0m 3.0m
注意,这些只是实验值,不是我说 OffMap 最终应该用这些。
你实际跑过去。
分别测试:
普通走过
直接 W。
奔跑通过
Shift + W。
斜着通过
W + D。
快速转向通过
冲向门口,然后突然转弯。
战斗状态下通过
拿枪、转镜头、边瞄准边过门。
你会很快发现:
“能通过”
和
“通过舒服”
完全不是一回事。
五、测试时不要只写“舒服/不舒服”
尽量描述具体。
例如:
| 门宽 | 感受 |
|---|---|
| 0.8m | 能过,但很容易撞边 |
| 1.2m | 普通走可以,奔跑转向别扭 |
| 1.6m | 比较自然 |
| 2.0m | 战斗移动也舒服 |
| 3.0m | 已经更像大型入口 |
你真正开始训练的是:
把感觉变成设计语言。
以后你就可以说:
“这里我故意用 1.2m,因为我想让入口产生压迫。”
而不是:
“这门怎么感觉怪怪的。”
六、第二站:走廊宽度
做几条平行走廊。
比如:
1.2m
1.8m
2.4m
3.0m
4.0m
6.0m
每条长度大约 10~15 米。
然后分别跑。
这里开始注意一个特别重要的问题:
第三人称镜头是不是在替你决定空间尺寸?
比如玩家身体明明过得去:
Player
●
│ │
但 Camera:
Camera
●
Player
●
│ │
空间太窄以后 SpringArm 收缩。
于是体验不是:
“我进入狭窄空间。”
而可能变成:
“镜头突然贴到我后脑勺上。”
这就是我们以后做洞穴、室内、狭窄遗迹必须考虑的问题。
七、不要急着把“挤”当成坏事
这一点非常重要。
如果:
所有走廊都必须舒服,
你的地图很快就会像机场。
Metrics 不只是帮我们发现“正常尺寸”。
还应该发现:
舒适
↓
略窄
↓
压迫
↓
非常难受
↓
不可接受
例如最后可能得到:
4m = 宽松战斗空间
2.5m = 普通移动
1.8m = 狭窄但还能自然移动
1.2m = 明显压迫
<1m = 需要特殊处理
以后关卡设计的时候:
进入地下设施
你可能故意从:
4m
↓
2.5m
↓
1.5m
一点一点压缩空间。
玩家根本不用 UI,就会开始觉得:
“这里越来越不对劲了。”
这就是 Metrics 开始参与情绪。
八、第三站:高度
这一组特别重要。
做不同高度的平台:
0.2m
0.4m
0.6m
0.8m
1.0m
1.2m
1.5m
2.0m
测试:
- 直接走过去会不会自动卡住;
- 什么高度必须跳;
- 什么高度跳得上;
- 什么高度看起来能跳但实际上不行;
- 什么高度视觉上明显就是墙。
这里有一个很重要的设计问题:
视觉承诺。
如果一个平台看起来:
“肯定跳得上。”
结果玩家怎么跳都上不去,
这不是挑战。
这是世界在骗玩家。
反过来:
明显很高,但玩家轻轻一跳就吸上去了,
也会损害空间尺度感。
九、第四站:跳跃距离
做几条坑:
1m
1.5m
2m
2.5m
3m
3.5m
4m
...
分别测试:
原地跳
行走跳
奔跑跳
极限边缘跳
然后记录三种区间:
安全距离
风险距离
理论极限
比如以后你可能发现:
2.0m
= 玩家基本不会失败
2.8m
= 需要认真跑跳
3.2m
= 极限操作
这三个数字以后完全是三种不同的关卡语言。
十、“能不能跳过去”其实不是最重要的问题
更重要的是:
玩家站在坑边,能不能预判自己能不能过去?
这是非常关键的。
好的平台尺寸会让玩家逐渐形成:
“这个看起来我能跳。”
而不是每次:
存档 → 跳 → 死 → 原来不行。
当然有时候不确定本身就是设计。
比如你之前提到的深坑。
但如果普通平台跳跃也天天靠试错,就不是有趣的不确定性了。
十一、第五站:坠落高度
做一个平台阶梯:
1m
2m
3m
4m
5m
6m
8m
10m
...
测试:
- 什么高度视觉上完全安全;
- 什么高度让你开始犹豫;
- 什么高度开始掉血;
- 什么高度是明显危险;
- 什么高度基本等于自杀。
这里尤其不要只记录代码里的:
fall_damage_threshold = ...
要记录:
玩家视觉直觉和游戏规则是否一致。
比如:
看起来:
应该只是摔疼
实际:
瞬间暴毙
就值得警惕。
十二、第六站:窗口和掩体
这个对 OffMap 现在尤其重要。
因为我们前面已经遇到过:
Camera 看得见,但枪口被窗框挡住。
所以在 Metrics Zoo 里专门做:
不同窗台高度
不同窗口宽度
不同墙厚
不同掩体高度
比如窗口高度:
0.7m
0.9m
1.1m
1.3m
1.5m
然后拿当前手枪实际测试:
- 玩家能不能看出去;
- 枪口能不能打出去;
- Camera 会不会给玩家错误预期;
- 站近一点和退远一点有什么差异;
- 横向移动时弹道会不会频繁撞窗框。
这个测试以后甚至可以直接影响我们之前暂缓的:
Line-of-Fire Feedback + Camera Feel
所以这不是单纯建筑尺寸测试。
这是在研究:
第三人称战斗空间。
十三、第七站:房间尺寸
最后做几个纯空房间。
例如:
3×3m
5×5m
8×8m
12×12m
20×20m
进去站一会。
跑。
转镜头。
战斗。
你会发现尺寸本身会产生完全不同的感觉。
例如:
3×3
可能像:
储藏室。
5×5
可能像:
普通室内房间。
10×10
开始具有:
Encounter 空间。
20×20
如果里面什么都没有:
空得像没做完。
这就是以后所谓:
空间密度。
十四、然后开始研究“连接”
这是今天最后一个理论点。
单独一个房间尺寸还只是几何。
真正的关卡感从:
空间之间如何连接
开始出现。
例如:
宽阔大厅
↓
窄门
↓
长走廊
↓
低矮隧道
↓
突然来到巨大地下空间
即使:
没敌人
没谜题
没剧情
这个过程已经有节奏了。
你可以亲自试:
Version A
大
→ 大
→ 大
→ 大
Version B
大
→ 小
→ 更小
→ 突然巨大
然后比较第二个为什么更有感觉。
这就是建筑空间里常讲的:
Compression → Release
先压缩,再释放。
十五、我们今天真正开始训练的是“预测”
做到后面,你应该开始能看到:
2m 的走廊
脑子里大概知道:
会是什么感觉。
看到:
3m 的坑
大概知道:
玩家会不会觉得危险。
这就是 Metrics 真正的价值。
它把:
“凭感觉乱搭”
慢慢变成:
有依据地凭感觉搭。
注意,最终仍然需要感觉。
Metrics 不是用数字替代设计。
是让你的直觉有经验支撑。
第一份作业
今天先不要做完整 Gym。
只完成三个区域:
A. 门宽测试
B. 走廊宽度测试
C. 平台高度测试
场景路径
如果你要现在在项目里创建:
levels/level_design_gym/metrics_zoo.tscn
如果 levels/level_design_gym/ 还不存在,就新建这个文件夹。
暂时不需要写任何新 GDScript。
直接用 Godot 的:
StaticBody3DCollisionShape3DMeshInstance3D
或者你现在项目已有的灰盒方式搭就行。
作业要求
不要追求精确美术。
每个测试对象旁边最好简单标个数字,例如:
DOOR 1.2m
DOOR 1.6m
DOOR 2.0m
如果你们现在还没有方便的 3D Label,也不用为了这个开发系统。
编辑器里把节点名写清楚就够:
Door_080
Door_120
Door_160
Door_200
Door_300
你测试的时候,只回答这些问题
门
从“刚好能通过”到“战斗中也舒服”,分别大概是多少?
走廊
从“压迫”到“宽松”,尺寸变化在哪些位置明显发生?
平台
哪个高度可以无意识跨过?
哪个高度让人自然想到跳?
哪个高度看起来能跳上去,但实际上很难?
暂时不要调整玩家
这是很重要的。
如果测试发现:
某个门很难过,
先记录。
不要马上改玩家碰撞体。
如果:
某个平台跳不上去,
先记录。
不要马上调 jump_velocity。
我们现在是在:
测量 OffMap 当前角色。
不是让角色适应测试场。
否则尺子量着量着自己变长了。😂
第一单元第 1 次完成标准
我们不看“场景好不好看”。
只要你最后能够说:
“OffMap 当前角色通过 1.X 米门是什么感觉;2.X 米走廊是什么感觉;大概 X 米高的平台开始要求跳跃。”
这一课就成功了。
然后下一步我们再进入 Metrics 第 2 课:跳跃、坠落、窗口、掩体与第三人称 Camera。那一课会开始直接连接 OffMap 现在的移动和射击系统,也会第一次出现真正属于你们游戏自己的 Level Design Metrics Sheet。
