#if GRAPH_DESIGNER using UnityEngine; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; using BaseGames.Core; using BaseGames.Core.Pool; namespace BaseGames.Enemies.AI { /// /// BD Action:在敌人当前位置生成弹射物。 /// ProjectileKey 为 Addressable 键,通过 GlobalObjectPool 实例化。 /// [TaskName("Spawn Projectile")] [TaskCategory("BaseGames/Enemy/Utility")] [TaskDescription("在指定位置生成投射物并赋予初速度")] public class BD_SpawnProjectile : Action { [SerializeField] private Vector2 m_Direction = Vector2.right; [SerializeField] private string m_ProjectileKey = ""; [SerializeField] private float m_Speed = 8f; public override TaskStatus OnUpdate() { if (string.IsNullOrEmpty(m_ProjectileKey)) return TaskStatus.Failure; var pool = ServiceLocator.GetOrDefault(); if (pool == null) return TaskStatus.Failure; var go = pool.Spawn(m_ProjectileKey, transform.position, Quaternion.identity); if (go != null) { var rb = go.GetComponent(); if (rb != null) rb.velocity = m_Direction.normalized * m_Speed; } return TaskStatus.Success; } } } #endif