Một đợt
Bài học 5 trên 25 trong khóa học Game Unity: thủ thành của Coddy.
Grunt và Runner giờ là các prefab, cùng với Tank và Boss, còn Spawner đứng ở WP0. Một đợt gồm một vài con số: loại kẻ địch nào, số lượng bao nhiêu, khoảng cách giữa chúng. Vì vậy, Wave là một lớp [System.Serializable], còn spawner lưu một List<Wave> để Inspector điền tám đợt của trò chơi vào. Nếu không có [System.Serializable], Unity không thể điền danh sách và danh sách vẫn trống.
Tạo kẻ địch theo từng đợt có khoảng nghỉ là một coroutine: yield return new WaitForSeconds(...) chờ mà không dừng trò chơi. Prefab không thể tham chiếu đến các waypoint trong cảnh, vì vậy spawner gán cho mỗi kẻ địch mới các waypoint riêng ngay sau Instantiate:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);Thử thách
DễĐưa đợt Grunt đầu tiên đi dọc theo đường.
- Trong
Wave.cs, đặt[System.Serializable]lênWave, vớipublic Enemy enemy;,public int count;vàpublic float spacing;. - Trong
WaveSpawner, thêm[SerializeField] private List<Wave> waves;và[SerializeField] private Transform[] waypoints;. - Từ
Start, chạy một coroutine để tạowaves[0].countkẻ địch như trên.
Nhấn Chơi: sáu Grunt tiến ra, cách nhau 1.2 giây. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
// Sẽ triển khai sau: cho kẻ địch di chuyển theo đường đi thành từng đợt.
public class WaveSpawner : MonoBehaviour
{
}
Tất cả bài học trong Game Unity: thủ thành
Tự luyện tập: Playground Unity