练习:它变成了一个游戏
everything from tab 01–04 · a run you can win or lose
把竞技场变成一个像样的地方,再把它变成一个游戏。在你一直用来交战的那些方块周围雕刻地形,烘焙光照,撒下几百棵树,加上环境音——然后接上三波进攻、失败画面和重玩按钮。60 FPS 依然要稳得住。
复用的东西
还是那个竞技场,现在成了值得在其中一战的地方——而且你真的会输。
分五个阶段来建
阶段 1 —— 灰盒搭建
在贴任何贴图之前:先塑造出地形的起伏,再操控角色走一圈。灰模阶段的空间如果本来就无聊,种多少棵树都救不回来。
Terrain 设为 200 × 200 m,heightmap resolution 513,位置放在 -100, -0.05, -100。
用 Set Height 在现有方块网格周围压出一块约 40 × 40 m 的空地 —— 别把方块挪走,而是绕着它们建世界。
把四周抬高了做成山丘,让玩家看不到 Terrain 的边界。
全部 Smooth 两遍。地形扎手,是新手第一个场景最明显的破绽。
阶段 2 —— 材质与模块化零件
Terrain Layer 最多四层:草地、土路、坡面的岩石,再加一层点缀。
每层 Tiling 设成 10–15 m,让重复花纹看不出来。
按 1 m 网格用 6 个模块拼一间小屋:地板、墙、带门的墙、转角、屋顶、台阶。
给墙做两个 Prefab 变体 —— 石墙和木墙 —— 这样小屋和废墟能共用同一个基础。
阶段 3 —— 靠撒,别靠摆
Trees count 180 radius 80 scaleRange 0.85 – 1.35 groundMask = Terrain
Rocks count 90 radius 70 scaleRange 0.6 – 1.8 groundMask = Terrain
Grass tufts count 260 radius 45 scaleRange 0.8 – 1.2 groundMask = Terrain
// the slope check in PropScatter is what keeps trees off cliff faces
if (Vector3.Angle(hit.normal, Vector3.up) > 30f) continue;阶段 4 —— 打光
Directional Light 放在 50, -30, 0,Mode = Mixed,柔和阴影,intensity 约 1.1,颜色偏暖一点。
把每棵树、每块石头和每个小屋零件都勾上 Static。Knight 和敌人保持动态。
先在 Lightmap Resolution 10 下 Bake 一次看效果,最终版再用 30 烘焙一次。。
Fog 的颜色对齐 Skybox 的地平线,用 Linear,start 90 m end 150 m —— 然后把相机的 Far 降到 160。
阶段 5 —— 声音与优化
一条 2D 环境音底(风 + 鸟叫),小屋里放一个 3D 音源(篝火),脚步声用 Animation Event 触发。
给树的 Prefab 加 LOD Group,两级 LOD 再加一个 Culled 区间。
在树、石头和草的材质上开启 GPU Instancing。
在 Quality settings 里把 Shadow Distance 设为 40,然后打开 Profiler,对照下面的指标看是不是真的达标了。
做到这些才算完
- ✓操控 Knight 从小屋走到树林边,既不会撞到隐形墙,也不会掉出地面。
- ✓站在场景任何位置,都看不到 Terrain 的边缘或地平线的接缝。
- ✓静态道具的阴影已经烘焙好,只有角色用实时阴影。
- ✓没有任何两棵树的大小和旋转完全一样。
- ✓没有树或石头悬在半空,也没有半截插在崖壁上。
- ✓环境音处处能听到,离小屋越远,篝火声越小。
- ✓Stats 面板里每一项都达到下面表格的数字,而且是走着测出来的,不是站着测的。
要达到的数字
| 指标 | 目标值 | 原因 |
|---|---|---|
| 批次数(绘制调用) | ≤ 100 | 在移动端,第一个拖垮性能的就是这个数字。 |
| 屏幕上的三角形数 | ≤ 300k | 超过这个数,中端 GPU 就开始掉帧。 |
| 实时灯光 | 1 | 其余全部要烘焙,没有例外。 |
| 阴影距离 | ≤ 50 m | 实时阴影通常是场景里最贵的一项。 |
| 相机远裁剪面 | ≤ 200 m | 雾正好遮住裁剪面,性能等于白捡。 |
| 行走时的 FPS | ≥ 60 | 站着不动证明不了什么 —— 要边走边测。 |
想继续加码的话
加上昼夜循环脚本,但完全不重新烘焙 —— 看看哪里坏了、为什么坏。
烘焙一份 NavMesh,让一个敌人在树林之间走巡逻路线。
加一条河,用滚动 UV 的水 shader,再配一个 3D 水声。
用同一批道具、换一套灯光配置,做一个竞技场的夜晚变体。