Hủy đối tượng
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 67 trên 85.
Destroy(obj) xóa một GameObject khỏi cảnh, bao gồm cả các đối tượng con. Đối số thứ hai đặt độ trễ: Destroy(obj, 2f) sẽ xóa đối tượng sau 2 giây, còn tập lệnh gọi hàm này tiếp tục chạy ngay lập tức. Pháo này bắn khi nhấn Space, và mỗi viên đạn nó tạo ra sẽ biến mất sau 2 giây:
public GameObject bulletPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
Destroy(bullet, 2f);
}
}Hãy truyền bản sao, không phải prefab: Destroy(bulletPrefab) sẽ bị từ chối với thông báo Destroying assets is not permitted to avoid data loss. Và hãy truyền một GameObject khi bạn muốn chỉ định đối tượng. Bên trong một tập lệnh, gameObject là đối tượng chứa tập lệnh đó, vì vậy Destroy(gameObject) sẽ xóa đối tượng ấy, còn Destroy(this) chỉ xóa tập lệnh và để đối tượng nguyên vẹn.
Đối tượng không bị xóa ngay lập tức. Unity xóa đối tượng vào cuối khung hình hiện tại, sau các lệnh gọi Update() và LateUpdate() của khung hình đó, vì vậy các dòng sau Destroy vẫn chạy và bạn vẫn có thể tìm thấy đối tượng cho đến khi khung hình kết thúc.
Thử thách
Trung bìnhXóa những đồng xu cũ và để phím Space xóa máng thả.
- Giữ đồng xu mới,
GameObject coin = Instantiate(...);, rồi gọiDestroy(coin, 3f);. - Khi có
Input.GetKeyDown(KeyCode.Space), gọiDestroy(gameObject);.Destroy(this)chỉ xóa tập lệnh.
Nhấn Chơi: mỗi đồng xu biến mất sau 3 giây và phím Space sẽ ngừng tạo đồng xu mới. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class CoinChute : MonoBehaviour
{
public GameObject coinPrefab;
public float interval = 1f;
float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
Instantiate(coinPrefab, transform.position, Quaternion.identity);
timer -= interval;
}
// Space: hủy ống thả xu
}
}
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 đèn3Inspector
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