暂时修改
This commit is contained in:
85
unity/Assets/enemy/EnemyManager.cs
Normal file
85
unity/Assets/enemy/EnemyManager.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user