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; } } }