using System.Collections.Generic;
using UnityEngine;
namespace IndianOceanAssets.Engine2_5D
{
///
/// 敌人管理器 —— 在游戏开始时,于场景中所有 EnemySpawnPoint 处生成敌人。
///
/// 用法:
/// 1. 在场景中放置空物体,挂 EnemySpawnPoint 组件,作为出生点
/// 2. 在场景中创建空物体,挂此 EnemyManager 脚本
/// 3. 把敌人预制体拖到 enemyPrefab 字段
/// 4. 运行时自动在所有出生点生成敌人
///
public class EnemyManager : MonoBehaviour
{
public static EnemyManager Instance { get; private set; }
[Header("敌人物体预制体")]
[SerializeField] private GameObject enemyPrefab;
[Tooltip("勾选后游戏开始时自动在所有出生点生成敌人")]
[SerializeField] private bool spawnOnStart = true;
private readonly List _enemies = new List();
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(this);
return;
}
Instance = this;
}
private void Start()
{
if (spawnOnStart)
SpawnAll();
}
///
/// 在所有 EnemySpawnPoint 处生成敌人
///
[ContextMenu("Spawn All")]
public void SpawnAll()
{
var spawnPoints = FindObjectsByType(FindObjectsSortMode.None);
foreach (var sp in spawnPoints)
{
SpawnEnemy(sp.transform.position, sp.transform.rotation);
}
Debug.Log($"[EnemyManager] 在 {spawnPoints.Length} 个出生点生成了 {_enemies.Count} 个敌人");
}
///
/// 在指定位置生成一个敌人
///
public GameObject SpawnEnemy(Vector3 position, Quaternion rotation)
{
if (enemyPrefab == null)
{
Debug.LogWarning("[EnemyManager] enemyPrefab 未设置!");
return null;
}
var enemy = Instantiate(enemyPrefab, position, rotation);
var ai = enemy.GetComponent();
if (ai != null && !_enemies.Contains(ai))
_enemies.Add(ai);
return enemy;
}
///
/// 获取所有活跃敌人(自动清理已销毁的)
///
public List GetActiveEnemies()
{
_enemies.RemoveAll(e => e == null);
return _enemies;
}
}
}