Unity - Coroutines
Coroutines là công cụ hữu ích nhất khi tạo trò chơi trong Unity. Chúng ta hãy xem xét dòng mã được hiển thị bên dưới để hiểu về coroutines là gì.
IEnumerator MyCoroutineMethod() {
// Your code here…
yield return null;
}
Nói chung, nếu bạn gọi một hàm trong Unity (hoặc C #, thực sự), hàm sẽ chạy từ đầu đến cuối. Đây là những gì bạn sẽ coi là hành vi "bình thường" khi mã của bạn có liên quan. Tuy nhiên, đôi khi chúng ta muốn cố tình làm chậm một chức năng hoặc khiến nó chờ lâu hơn khoảng thời gian tích tắc mà nó chạy. Một quy trình đăng quang có khả năng chính xác là: một quy trình đăng ký là một chức năng có khả năngwaiting và timing quy trình của nó, cũng như tạm dừng nó hoàn toàn.
Chúng ta hãy xem xét một ví dụ để hiểu cách thức hoạt động của quy trình đăng ký. Giả sử chúng ta muốn tạo một hình vuông thay đổi màu của nó giữa màu đỏ và xanh lam trong khoảng thời gian 1 giây.
Để bắt đầu, chúng tôi tạo một sprite. Tiếp theo, tạo một tập lệnh mới và đặt tên cho nóColorChanger. Trong tập lệnh này, chúng tôi nhận được tham chiếu đếnSprite Renderercủa sprite. Tuy nhiên, chúng tôi sẽ sử dụng một cách khác để lấy thành phần. Thay vì kéo và thả thành phần vào một khe cắm như chúng ta đã làm cho đến nay, chúng ta sẽ yêu cầu mã phát hiện chính thành phần đó.
Điều này được thực hiện thông qua GetComponent, phương thức này trả về thành phần phù hợp đầu tiên mà nó phát hiện. Vì chúng tôi chỉ sử dụng một Sprite Renderer cho mỗi đối tượng, chúng tôi có thể sử dụng phương pháp này để tự động phát hiện và nhận tham chiếu đến trình kết xuất của chúng tôi mỗi lần.
Hãy nhớ rằng trình kết xuất có trách nhiệm làm cho hình ảnh thực sự hiển thị trên màn hình. Trình kết xuất cócolorthuộc tính ảnh hưởng đến màu toàn cầu của sprite; đây là giá trị sẽ được sửa đổi. Làm choColor các giá trị public sẽ cho phép chúng tôi chọn chúng thông qua trình chỉnh sửa trong chương trình chọn màu mặc định của hệ điều hành của bạn.
private SpriteRenderer sr;
public Color color1;
public Color color2;
void Start () {
sr = GetComponent<SpriteRenderer>();
StartCoroutine(ChangeColor());
}
IEnumerator ChangeColor() {
while (true) {
if (sr.color == color1)
sr.color = color2;
else
sr.color = color1;
yield return new WaitForSeconds(3);
}
}
Bây giờ, chúng ta sẽ bẫy hàm coroutine của chúng ta trong một vòng lặp while.
Để tạo một quy trình đăng quang trong C #, chúng ta chỉ cần tạo một phương thức trả về IEnumerator. Nó cũng cần mộtyield returntuyên bố. Câu lệnh trả về lợi nhuận là đặc biệt; nó thực sự ra lệnh cho Unity tạm dừng tập lệnh và tiếp tục ở khung tiếp theo.
Có một số cách có thể được sử dụng để mang lại lợi nhuận; một trong số đó là tạo một phiên bản củaWaitForSecondslớp học. Điều này khiến quy trình đăng quang phải chờ một khoảng thời gian nhất định trong thế giới thực trước khi tiếp tục.
Hãy để chúng tôi biên dịch mã của chúng tôi và quay trở lại Unity. Chúng tôi chỉ cần chọn các màu xen kẽ của chúng tôi và nhấn chơi. Đối tượng của chúng ta bây giờ sẽ chuyển đổi giữa hai màu trong khoảng thời gian 3 giây. Bạn có thể biến khoảng thời gian thành một biến công khai và điều chỉnh tần suất thay đổi màu sắc.
Coroutines được sử dụng rộng rãi cho timednhư phương pháp mà chúng tôi vừa làm. Sự đa dạng củaWaitForXcác phương pháp có công dụng riêng. Coroutines cũng được sử dụng để chạy các quy trình “bên lề” tự chạy trong khi trò chơi chạy đồng thời. Điều này rất hữu ích, chẳng hạn, để tải các phần ngoài màn hình ở cấp độ lớn trong khi trình phát bắt đầu tại một điểm.