U
tab 01Căn bản11 bài — chạm để mở
07 / 11 · 8 phút
Căn bản

Prefab hình khối

dự án của bạn tới lúc này

Assets/

Scenes/

Arena.unity

Floor

Prefabs/

P_CubeP_SphereP_CapsuleP_Cylinder

Materials/

M_FloorM_Block

đã có sẵnbài này thêm

Prefab là một GameObject đã được lưu lại, bạn nhân ra bao nhiêu bản cũng được. Sửa bản gốc thì mọi bản sao trong mọi cảnh tự đổi theo.

sơ đồ động

Một prefab trong cửa sổ Project, nhiều bản sao trong cảnh.

Tạo prefab hình khối

  1. 1

    GameObject▸3D Object▸Cube. Reset Transform, đặt Position là 0, 0.5, 0.

  2. 2

    Vì sao 0.5? Cube mặc định cao 1 mét, tâm nằm ở giữa, nên phải nâng lên nửa mét mới đứng đúng trên sàn.

  3. 3

    Tạo material M_Block, chọn màu, kéo thả lên cube.

  4. 4

    Kéo cube từ Hierarchy vào thư mục Assets/Prefabs bạn đã tạo ở bài 05. Tên chuyển sang màu xanh — nó đã thành prefab.

  5. 5

    Làm tương tự với Sphere, Capsule và Cylinder. Bốn prefab khối là đủ dùng.

Sửa prefab

✓ Edit the prefab asset

Sửa chính prefab

Bấm đúp vào prefab → vào chế độ prefab. Sửa gì cũng áp dụng cho mọi bản sao.

✖ Edit one instance

Sửa một bản sao

Sửa bản sao trong cảnh sẽ tạo override (chữ in đậm). Trường đó không còn theo prefab nữa.
  • Trong Inspector, menu thả xuống Overrides cho biết bạn đã đổi gì. Apply đẩy ngược lên prefab; Revert bỏ thay đổi đi.

  • Chuột phải prefab → Create → Prefab Variant khi muốn một phiên bản kế thừa nhưng khác chút (cube đỏ từ cube xám).

Hít lưới khi đặt vật thể

  • Giữ Ctrl (Windows) / Cmd (Mac) khi kéo để vật di chuyển theo bước cố định.

  • Chỉnh bước nhảy ở Edit▸Grid and Snap Settings — 1 mét là hợp lý khi xếp khối.

  • Giữ V để bắt một đỉnh và dán chính xác vào đỉnh của vật thể khác.

Tham chiếu prefab từ code

Spawner.cs
using UnityEngine;

public class Spawner : MonoBehaviour
{
    [SerializeField] private GameObject blockPrefab;   // kéo P_Cube vào đây

    void Start()
    {
        //(prefab, vị trí, góc xoay)
        Instantiate(blockPrefab, new Vector3(2f, 0.5f, 3f), Quaternion.identity);
    }
}
  • Quaternion.identity nghĩa là không xoay. Đó là cách Unity viết góc 0, 0, 0.

  • Kéo prefab từ Project (không phải từ Hierarchy) vào ô đó trong Inspector.

Lỗi hay gặp

  • Tên không đổi sang màu xanh: bạn nhân đôi cube bằng Ctrl+D thay vì kéo nó vào Assets/Prefabs. Bản nhân đôi là một object thứ hai trong cảnh, không phải asset. Chỉ thao tác kéo vào cửa sổ Project mới tạo ra prefab.

  • Bạn đổi màu cube trong cảnh mà chín mươi chín cái kia vẫn xám: thay đổi đó là override trên một bản sao. Mở menu Overrides rồi Apply All, hoặc sửa thẳng asset trong chế độ prefab.

  • Kéo bản sao trong cảnh vào ô Inspector thay vì asset thì chạy được cho tới lúc không chạy nữa: Instantiate nhân bản chính bản sao đó kèm override, và tham chiếu là null ở mọi scene khác. Luôn kéo từ cửa sổ Project.