using UnityEngine; using BaseGames.Combat; using BaseGames.Core; using BaseGames.Core.Pool; namespace BaseGames.Enemies { /// /// 远程敌人。重写 以从对象池生成抛射物。 /// Behavior Designer 任务通过调用 SpawnProjectile(payload) 触发发射。 /// public class RangedEnemy : EnemyBase { [SerializeField] private ProjectileConfigSO _projectileConfig; [SerializeField] private Transform _firePoint; protected override void Awake() { base.Awake(); Debug.Assert(_projectileConfig != null, $"[RangedEnemy] {name}: 未配置 ProjectileConfigSO。", this); } /// /// 从对象池生成一枚抖射物并朝玩家发射。 /// payload 可留空;若传入多重配置键则由子类解析。 /// public override void SpawnProjectile(string payload) { var spawnPos = _firePoint != null ? _firePoint.position : transform.position; var pool = ServiceLocator.GetOrDefault(); if (pool == null) { Debug.LogWarning($"[RangedEnemy] {name}: IObjectPoolService 未就绪,无法生成抛射物。"); return; } var go = pool.Spawn( _projectileConfig.PoolKey, spawnPos, Quaternion.identity); if (go == null) return; var proj = go.GetComponent(); if (proj == null) return; Vector2 dir = _playerTransform != null ? ((Vector2)(_playerTransform.position - spawnPos)).normalized : (Vector2)transform.right; var damageInfo = DamageInfo.From(_projectileConfig.DamageSource); proj.Initialize(_projectileConfig, damageInfo, dir); } } }