跳转到内容

8. Prefab,把东西做成模具

约 4 分钟

下面通篇会拿同一个「发光球」当例子,所以这一章一开始,先花两分钟把它做出来。这一步本身没什么新概念,纯粹是给后面的讨论准备一个对象。

  1. Hierarchy 空白处右键 → 3D ObjectSphere,新物体命名 GlowBall,Position 随便放在房间里能看见的位置(比如 0, 1.5, 0)。
  2. 选中 GlowBall,Inspector 底部 Add Component → 搜 Light → 加上 Light 组件。
  3. Light 组件里:Type 保持默认 Point(点光源,向四周发光);Range 改成 5Intensity 改成 2Color 调一个偏暖的橙黄。
  4. (可选)顺手给 Sphere 的 Material 颜色也调成接近的暖色,让球本身看着像在发光,而不是一颗被照亮的白球。材质细节在第 9 章展开,这里先随手调。

现在场景里有一颗能照亮周围的小球。下面所有的讨论都围绕它展开。

GlowBall 调好了:颜色不错,Range 5,Intensity 2,看着满意。

然后在房间另外三个角落各放一个,Ctrl+D 复制三份拖到位。四个球了。

第二天觉得 Range 5 太小,照不亮房间,要统一改成 8。于是逐个点四个球,改四次。

四个还行。再想象一下:赛博朋克走廊,两侧二十盏壁灯,要统一微调霓虹颜色。改二十次。改到第十五盏一个念头会冒出来:能不能改一次,所有同类灯一起变?

能。这就是 Prefab。

Prefab 大致可以理解为「生产模具」。配好一个物体,把它存成模具。以后从模具里压出新实例,配置完全一致。

操作两步:

  1. 在 Project 面板的 Assets 下新建文件夹 Prefabs
  2. 把 Hierarchy 里配好的 GlowBall 直接拖进 Prefabs 文件夹。

拖完会看到两个变化:Project 面板里多了一个蓝色的 GlowBall.prefab 文件;Hierarchy 里 GlowBall 的名字和图标变成了蓝色,它现在是一个 Prefab Instance(预制体实例),和磁盘上那个模具绑定了。

把 Project 面板里的 GlowBall.prefab 拖进场景,每拖一次多一个配置好的球。拖三次,加上原来那个,四个球。

双击 Project 面板里的 GlowBall.prefab,进入 Prefab 编辑模式(四周变暗,只剩这个球)。

把 Light 的 Range 从 5 改成 8,Ctrl+S 保存,点左上角箭头退出。

回到场景,四个球的灯光范围全都自动变成了 8。改一次,全部生效。

二十盏灯都一样,但其中一盏想做成绿色。

选中场景里的 GlowBall_C,直接把 Light 颜色改成绿色。改完后这个字段旁边出现一条蓝色小标记,Inspector 右上角会多出 Overrides 下拉,这代表这个实例在这个参数上和模具不同了。

接下来:改模具的 Range,GlowBall_C 的 Range 跟着变(没被 Override);改模具的颜色,GlowBall_C 颜色不变(已被 Override)。

判断法则很简单:发现自己要复制同一组配置两次以上,就该做成 Prefab。

门(模型 + 碰撞体 + 音效 + 脚本)、交互按钮、椅子、篝火、路灯、传送点,凡是有重复性质的物件,同一套配置要用第二遍时就做成 Prefab。等复制了很多份再改,得逐个实例改或逐个 Unpack。

右键一个 Prefab 实例,选 Unpack Prefab,它的名字会从蓝色变回黑色。此后模具怎么改都不再影响它。

适合引入了别人的 Prefab 想拆开研究的时候。但在自己的项目里慎用,解包后就失去全局一键更新的能力。

随着项目推进,文件会越来越多。从第一天就建好这个目录:

Assets/
├─ Scenes/ 场景文件
├─ Prefabs/ 预制体
├─ Materials/ 材质
├─ Audio/ 音频
└─ Scripts/ 脚本

不用追求精细,但分类要有。一周之后回头看,会感谢现在多花的两分钟。