Menu
CoddyTech

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);
challenge icon

Thử thách

Dễ

Đưa đợt Grunt đầu tiên đi dọc theo đường.

  1. Trong Wave.cs, đặt [System.Serializable] lên Wave, với public Enemy enemy;, public int count; và public float spacing;.
  2. Trong WaveSpawner, thêm [SerializeField] private List<Wave> waves; và [SerializeField] private Transform[] waypoints;.
  3. Từ Start, chạy một coroutine để tạo waves[0].count kẻ đị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