Prefab và Instantiate
Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 62 trên 85.
Prefab là một GameObject được lưu làm mẫu: kéo một đối tượng từ Hierarchy vào cửa sổ Project, Unity sẽ lưu đối tượng đó cùng tất cả thành phần và giá trị trong Inspector. Bản thân prefab không nằm trong cảnh. Tập lệnh lấy prefab thông qua một trường, giống như mọi tham chiếu khác: khai báo public GameObject parcelPrefab; rồi kéo prefab vào trường đó trong Inspector.
Instantiate(prefab, position, rotation) tạo một bản sao của prefab trong cảnh và trả về bản sao đó. Drone giao hàng này thả một gói hàng tại vị trí của chính nó mỗi khi bạn nhấn phím Space. Quaternion.identity nghĩa là không xoay:
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}Mỗi lần nhấn sẽ thêm một đối tượng vào Hierarchy, có tên là Parcel(Clone). Prefab vẫn giữ nguyên, nên mọi bản sao đều bắt đầu với cùng các giá trị. GetKeyDown rất quan trọng ở đây: nếu dùng GetKey, giữ phím Space trong nửa giây sẽ thả khoảng 30 gói hàng, mỗi khung hình một gói.
Thử thách
Trung bìnhCho mỗi lần nhấp chuột tạo ra một đồng xu phía trên nhân vật.
- Thêm trường
public GameObject coinPrefab;. Cảnh sẽ điền prefab Coin vào trường này. - Trong
Update(), khiInput.GetMouseButtonDown(0)xảy ra, gọiInstantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.
Nhấn Chơi, di chuyển rồi nhấp chuột: mỗi lần, một đồng xu sẽ xuất hiện phía trên nhân vật. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: trường GameObject công khai, gán prefab Coin
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
// Click: tạo một đồng xu ở vị trí cao hơn người chơi 2 đơn vị
}
}
Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity
1C# cơ bản trong Unity
Xin chào, UnityBiếnSố thập phân cần có fVăn bản trong ConsoleBiến có thể ghi nhớIf và elseSo sánh các sốÔn tập: Thu thập xu7Vòng lặp và phương thức
Lặp lại với forVòng lặp lồng nhauViết phương thứcPhương thức trả lờiMảngÔn tập: Cầu thang2Làm cho nó chuyển động
Đặt khối lập phươngDi chuyển theo từng khung hìnhXoay mỗi giâyĐiều khiển bằng các phímÔn tập: Lái khối lập phương5Vectơ
Cộng vectơPhương hướngKhông gian cục bộ và không gian thế giớiTốc độ theo đường chéoKhoảng cách giữa các vậtVector3 là một structÔn tập: Người điều khiển drone8GameObject và thành phần
Tham chiếu trong InspectorLấy một thành phầnThành phần bị thiếuThêm một thành phầnRequireComponentHiện và ẩnÔn tập: Công tắc đèn11Prefab và tạo đối tượng
Prefab và InstantiateTạo đối tượng theo bộ hẹn giờTạo đối tượng theo lướiDanh sách đối tượngXóa đối tượng mới nhấtHủy đối tượngTạo đối tượng ngẫu nhiênÔn tập: Pháo hoa3Inspector
Các trường trong InspectorSerializeFieldSố thực và MathfThuộc tính trong InspectorÔn tập: thang máy6Biến đổi và hệ phân cấp
Đối tượng cha và conKéo cờ lênTỷ lệNhìn vào các vật thểDi chuyển đến một điểmÔn tập: Mặt trăng quay quanh9Dự án: Bắt lấy ngôi sao
Người bắt saoNgôi sao rơiTự luyện tập: Playground Unity