Phuongne - 31-10-2019
Roài, đây sẽ là một bài viết ngắn nên mình đi vào chi tiết luôn, khởi mở đầu giới thiệu dài dòng nhá anh em
Coroutine với Invoke là gì?
Invoke sử dụng để gọi một hàm thông qua tên của nó (string) với một thời gian trễ xác định, ví dụ mình sẽ gọi hàm SpawnObject sau 2s:
Invoke (``"SpawnObject"``, 2);
Hoặc cũng có thể gọi InvokeRepeating để gọi một hàm lặp lại theo thời gian xác định
InvokeRepeating(``"Spawn"``, 2, 2);
Coroutines cũng có thể sử dụng được như Invoke với các YieldInstruction như yield return new WaitForSeconds(2);, tuy nhiên linh hoạt hơn nhiều so với Invoke và có thể truyền các tham số vào Coroutines, các bạn có thể vào Coroutine để hiểu rõ hơn
Deactivated Game Objects
Invoke/Invoke Repeating vẫn hoạt động ngay cả khi disable script chứa nó hay disable cả gameObject.
Coroutines thì có sự khác biệt nhỏ, khi disable gameObject thì nó sẽ dừng chạy nhưng disable script thì nó vẫn chạy.
gameObject.SetActive(false) | this.enabled = false | |
---|---|---|
Invoke/ InvokeRepeating | Vẫn hoạt động | Vẫn hoạt động |
Coroutines | Dừng chạy | Vẫn hoạt động |
“Dừng chạy” ở đây nghĩa là dừng hẳn luôn, không có nghĩa là pause nên nếu active thì sẽ **không** tiếp tục chạy từ điểm dừng.
Bài viết ngắn nên mình chỉ so sánh nhẹ vậy thôi, bạn nào muốn xem performance của Coroutines và Invoke thì có thể xem ở ĐÂY nhé.
Claims
Bài viết từ 2019 nên chỉ có giá trị tham khảo bạn nhé
Nguồn tham khảo
https://learn.unity.com/tutorial/invoke-2d#5c8a6da9edbc2a067d4752d0
https://github.com/antfarmar/Unity-3D-Asteroids/wiki/Invoke-vs.-Coroutines