方块预制体
Assets/
Scenes/
Arena.unity
Prefabs/
Materials/
你已经有的这一课新增
Prefab 就是一个存好的 GameObject,你想复制多少份都行。改本体,所有场景里的每一份拷贝都会跟着变。
Project 窗口里一个 prefab,场景里一堆实例。
动手做这些方块 prefab
- 1
。重置它的 Transform,把 Position 设为 0, 0.5, 0。
- 2
为什么是 0.5?默认 Cube 高 1 米,轴心在正中间,所以要抬高半米才刚好站在地板上。
- 3
新建一个 material M_Block,调好颜色,拖到 cube 上。
- 4
把 cube 从 Hierarchy 拖进你在第 05 课建的 Assets/Prefabs 文件夹。名字变成蓝色 —— 它现在就是 prefab 了。
- 5
Sphere、Capsule 和 Cylinder 照做一遍。四个方块 prefab 就够用了。
编辑 prefab
✓ Edit the prefab asset
✖ Edit one instance
在 Inspector 里,Overrides 下拉菜单会列出你改过的东西。Apply 把改动推回 prefab;Revert 直接丢掉这次修改。
想要一个继承过来又略有不同的版本(从灰色 cube 变出红色 cube),就右键 prefab → Create → Prefab Variant。
摆放时开启吸附
拖动时按住 Ctrl(Windows)/ Cmd(Mac),物体会按固定步长移动。
步长在 里设置 —— 拼方块时 1 米正合适。
按住 V 可以抓住一个顶点,把它精准贴到另一个物体的顶点上。
在代码里引用 prefab
using UnityEngine;
public class Spawner : MonoBehaviour
{
[SerializeField] private GameObject blockPrefab; // drag P_Cube here
void Start()
{
// (prefab, position, rotation)
Instantiate(blockPrefab, new Vector3(2f, 0.5f, 3f), Quaternion.identity);
}
}Quaternion.identity 表示不旋转。在 Unity 里它就是角度写成 0, 0, 0 的方式。
把 prefab 从 Project(不是 Hierarchy)拖进 Inspector 里的那个槽位。
常见错误
名字一直没变蓝:你是用 Ctrl+D 复制了 cube,而不是把它拖进 Assets/Prefabs。复制出来的只是场景里的第二个物体,不是资源。只有拖进 Project 窗口那一下才会生成 prefab。
你把场景里的 cube 改成红色,另外九十九个还是灰的:那次修改只是一个实例上的 override。打开 Overrides 下拉菜单点 Apply All,或者直接进 prefab 模式改资源本体。
把场景里的那份拷贝拖进 Inspector 槽位而不是拖资源,一开始也能跑:但 Instantiate 克隆的是那个带 override 的实例,换到别的场景引用就是 null。永远从 Project 窗口拖。