U
章 01基础11 课 — 点击打开
07 / 11 · 8 分钟
基础

方块预制体

到目前为止的项目

Assets/

Scenes/

Arena.unity

Floor

Prefabs/

P_CubeP_SphereP_CapsuleP_Cylinder

Materials/

M_FloorM_Block

你已经有的这一课新增

Prefab 就是一个存好的 GameObject,你想复制多少份都行。改本体,所有场景里的每一份拷贝都会跟着变。

动态图解

Project 窗口里一个 prefab,场景里一堆实例。

动手做这些方块 prefab

  1. 1

    GameObject▸3D Object▸Cube。重置它的 Transform,把 Position 设为 0, 0.5, 0。

  2. 2

    为什么是 0.5?默认 Cube 高 1 米,轴心在正中间,所以要抬高半米才刚好站在地板上。

  3. 3

    新建一个 material M_Block,调好颜色,拖到 cube 上。

  4. 4

    把 cube 从 Hierarchy 拖进你在第 05 课建的 Assets/Prefabs 文件夹。名字变成蓝色 —— 它现在就是 prefab 了。

  5. 5

    Sphere、Capsule 和 Cylinder 照做一遍。四个方块 prefab 就够用了。

编辑 prefab

✓ Edit the prefab asset

双击 prefab 进入 prefab 模式。在这里改的东西会应用到所有实例,不管在哪个场景。

✖ Edit one instance

改场景里的实例会生成 override(加粗的文字)。那个字段从此就不再跟 prefab 一致了。
  • 在 Inspector 里,Overrides 下拉菜单会列出你改过的东西。Apply 把改动推回 prefab;Revert 直接丢掉这次修改。

  • 想要一个继承过来又略有不同的版本(从灰色 cube 变出红色 cube),就右键 prefab → Create → Prefab Variant。

摆放时开启吸附

  • 拖动时按住 Ctrl(Windows)/ Cmd(Mac),物体会按固定步长移动。

  • 步长在 Edit▸Grid and Snap Settings 里设置 —— 拼方块时 1 米正合适。

  • 按住 V 可以抓住一个顶点,把它精准贴到另一个物体的顶点上。

在代码里引用 prefab

Spawner.cs
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 窗口拖。