86 lines
2.6 KiB
C#
86 lines
2.6 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace IndianOceanAssets.Engine2_5D
|
|
{
|
|
/// <summary>
|
|
/// 敌人管理器 —— 在游戏开始时,于场景中所有 EnemySpawnPoint 处生成敌人。
|
|
///
|
|
/// 用法:
|
|
/// 1. 在场景中放置空物体,挂 EnemySpawnPoint 组件,作为出生点
|
|
/// 2. 在场景中创建空物体,挂此 EnemyManager 脚本
|
|
/// 3. 把敌人预制体拖到 enemyPrefab 字段
|
|
/// 4. 运行时自动在所有出生点生成敌人
|
|
/// </summary>
|
|
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<EnemyAI> _enemies = new List<EnemyAI>();
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(this);
|
|
return;
|
|
}
|
|
Instance = this;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (spawnOnStart)
|
|
SpawnAll();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在所有 EnemySpawnPoint 处生成敌人
|
|
/// </summary>
|
|
[ContextMenu("Spawn All")]
|
|
public void SpawnAll()
|
|
{
|
|
var spawnPoints = FindObjectsByType<EnemySpawnPoint>(FindObjectsSortMode.None);
|
|
foreach (var sp in spawnPoints)
|
|
{
|
|
SpawnEnemy(sp.transform.position, sp.transform.rotation);
|
|
}
|
|
Debug.Log($"[EnemyManager] 在 {spawnPoints.Length} 个出生点生成了 {_enemies.Count} 个敌人");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在指定位置生成一个敌人
|
|
/// </summary>
|
|
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<EnemyAI>();
|
|
if (ai != null && !_enemies.Contains(ai))
|
|
_enemies.Add(ai);
|
|
|
|
return enemy;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取所有活跃敌人(自动清理已销毁的)
|
|
/// </summary>
|
|
public List<EnemyAI> GetActiveEnemies()
|
|
{
|
|
_enemies.RemoveAll(e => e == null);
|
|
return _enemies;
|
|
}
|
|
}
|
|
}
|