Tạo Sóng địch (Enemy Waves)
C# Code
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Wave
{
public string name;
public GameObject enemyPrefab;
public int count;
public float spawnRate;
}
public class EnemyWaveSpawner : MonoBehaviour
{
public Wave[] waves;
public Transform[] spawnPoints;
public float timeBetweenWaves = 5f;
private int currentWaveIndex = 0;
private int enemiesRemaining;
void Start()
{
StartCoroutine(SpawnAllWaves());
}
IEnumerator SpawnAllWaves()
{
while (currentWaveIndex < waves.Length)
{
yield return new WaitForSeconds(timeBetweenWaves);
yield return StartCoroutine(SpawnWave(waves[currentWaveIndex]));
currentWaveIndex++;
}
Debug.Log("All waves completed!");
}
IEnumerator SpawnWave(Wave wave)
{
Debug.Log("Spawning Wave: " + wave.name);
enemiesRemaining = wave.count;
for (int i = 0; i < wave.count; i++)
{
SpawnEnemy(wave.enemyPrefab);
yield return new WaitForSeconds(1f / wave.spawnRate);
}
// Chờ đến khi tất cả kẻ địch trong wave bị tiêu diệt
while (enemiesRemaining > 0)
{
yield return null; // Chờ đến frame tiếp theo
}
}
void SpawnEnemy(GameObject enemyPrefab)
{
Transform randomSpawnPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
GameObject enemyInstance = Instantiate(enemyPrefab, randomSpawnPoint.position, randomSpawnPoint.rotation);
// Giả sử kẻ địch có một script HealthSystem hoặc tương tự
// để thông báo khi nó chết. Cần phải có cơ chế này.
// Ví dụ: enemyInstance.GetComponent<EnemyHealth>().OnDeath += OnEnemyDeath;
}
// Hàm này được gọi khi một kẻ địch bị tiêu diệt
public void OnEnemyDeath()
{
enemiesRemaining--;
}
}Một hệ thống để spawn các đợt (wave) kẻ địch. Đợt tiếp theo sẽ bắt đầu sau khi tất cả kẻ địch trong đợt hiện tại đã bị tiêu diệt và một khoảng thời gian chờ trôi qua.