using Unity.Behavior; using Unity.Netcode; using UnityEngine; using Colosseum.Stats; namespace Colosseum.Enemy { /// /// 보스 캐릭터입니다. /// public class BossEnemy : EnemyBase { [Header("Boss Settings")] [Tooltip("초기 Behavior Graph")] [SerializeField] private BehaviorGraph initialBehaviorGraph; [Header("Debug")] [SerializeField] private bool debugMode = true; // 컴포넌트 private BehaviorGraphAgent behaviorAgent; // 정적 이벤트 (UI 자동 연결용) /// /// 보스 스폰 시 발생하는 정적 이벤트 /// public static event System.Action OnBossSpawned; /// /// 현재 활성화된 보스 (Scene에 하나만 존재한다고 가정) /// public static BossEnemy ActiveBoss { get; private set; } public override void OnNetworkSpawn() { base.OnNetworkSpawn(); // BehaviorGraphAgent 컴포넌트 확인/추가 behaviorAgent = GetComponent(); if (behaviorAgent == null) { behaviorAgent = gameObject.AddComponent(); } // 초기 AI 설정 if (IsServer && initialBehaviorGraph != null) { behaviorAgent.Graph = initialBehaviorGraph; } // 정적 이벤트 발생 (UI 자동 연결용) ActiveBoss = this; OnBossSpawned?.Invoke(this); if (debugMode) { Debug.Log($"[Boss] Boss spawned: {name}"); } } protected override void OnServerUpdate() { } protected override void HandleDeath() { // AI 완전 중단 (순서 중요: enabled=false를 먼저 호출하여 Update() 차단) if (behaviorAgent != null) { behaviorAgent.enabled = false; // 가장 먼저: Update() 호출 방지 behaviorAgent.End(); behaviorAgent.Graph = null; } behaviorAgent = null; base.HandleDeath(); } } }