Hiểu Prefabs và Instantiation
Lập tức và phá hủy các đối tượng được coi là rất quan trọng trong quá trình chơi. Instantiating đơn giản có nghĩa là đưa vào sự tồn tại. Các vật phẩm xuất hiện hoặc "xuất hiện" trong trò chơi, kẻ thù chết, các yếu tố GUI biến mất và các cảnh được tải mọi lúc trong trò chơi. Biết cách loại bỏ đúng cách những đồ vật không cần thiết và làm thế nào để mang những đồ vật bạn làm sau đó càng trở nên cần thiết hơn.
Trước tiên hãy để chúng tôi hiểu những gì prefabsChúng tôi. Prefabs được coi là quan trọng để hiểu cách Instantiation hoạt động trong Unity.
Prefabs giống như blueprintscủa một GameObject. Theo một cách nào đó, Prefabs là mộtcopycủa một GameObject có thể được sao chép và đưa vào một cảnh, ngay cả khi nó không tồn tại khi cảnh đó đang được tạo; nói cách khác, prefabs có thể được sử dụng đểdynamically generate GameObjects.
Để tạo nhà lắp ghép, bạn chỉ cần kéo GameObject mong muốn từ hệ thống phân cấp cảnh của bạn vào dự án Assets.
Bây giờ, để khởi tạo GameObject, chúng tôi gọi Instantiate()trong tập lệnh của chúng tôi. Phương pháp này, được định nghĩa trongMonoBehaviour, lấy một GameObject làm tham số, vì vậy nó biết GameObject nào để tạo / sao chép. Nó cũng có nhiều ghi đè khác nhau để thay đổi chuyển đổi của đối tượng mới khởi tạo, cũng như cách nuôi dạy con cái.
Hãy để chúng tôi thử tạo mới hexagon bất cứ khi nào Space phím được nhấn.
Tạo một tập lệnh mới có tên Instantiatorvà mở nó ra. bên trongUpdate , hãy nhập mã dưới đây.
Ở đây, chúng tôi đang sử dụng GetKeyDown phương pháp của Inputlớp để kiểm tra xem người chơi có nhấn một nút cụ thể trong khung hình cuối cùng hay không. Vì chúng tôi muốn nó tiếp tục kiểm tra, chúng tôi đưa nó vàoUpdate, chạy 60 lần mỗi giây. Phương thức GetKeyDown trả vềtrue nếu khóa được chỉ định bởi KeyCode enum (liệt kê tất cả các phím có thể có trên bàn phím tiêu chuẩn) được nhấn trong khung đó.
public class Instantiator : MonoBehaviour {
public GameObject Hexagon;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
Instantiate(Hexagon);
}
}
}
Khai báo GameObject công khai ở trên cùng tạo ra một khe tương tự như một khe mà chúng tôi đã tạo cho Rigidbody2D trong các bài học trước của chúng tôi. Vị trí này chỉ chấp nhậnprefabs (trong thời gian biên tập) và gameObjects (trong thời gian chạy), tuy nhiên.
Lưu tập lệnh và để nó biên dịch. Sau khi hoàn thành, hãy tạo mới,empty GameObject bằng cách chuyển đến menu chuột phải phân cấp đối tượng của bạn và chọn Create Empty.
Đặt tên cho Đối tượng này một cái gì đó dễ nhận biết chẳng hạn như Instatiator Objectvà đính kèm tập lệnh mới tạo của chúng tôi vào đó. Trong khe hiển thị cho GameObject, kéo vào nhà lắp ghép mà chúng tôi đã tạo.
Nếu chúng tôi chạy trò chơi ngay bây giờ, nhấn phím cách sẽ tạo ra một đối tượng Hexagon mới giống với đối tượng chúng tôi đã sử dụng để tạo nhà lắp ghép. Bạn có thể thấy từng hình lục giác được tạo trong hệ thống phân cấp đối tượng. Lý do bạn không thể thấy chúng hiển thị trong trò chơi là vì hiện tại, chúng đều đang được tạoexactly cái này hơn cái kia.
Trong bài học tiếp theo, chúng ta sẽ hiểu khái niệm về sự phá hủy đối tượng.