using UnityEngine; [RequireComponent(typeof(Collider2D))] // 감지를 위한 Collider2D(Trigger 설정)가 필수적으로 요구됩니다. public class NPCInteraction : MonoBehaviour { private NPCDialogueManager dialogueManager; private void Start() { // 1. 씬에 배치된 NPCDialogueManager 컴포넌트를 탐색해 바인딩합니다. dialogueManager = FindObjectOfType(); if (dialogueManager == null) { Debug.LogError("[NPC] 씬에서 NPCDialogueManager를 찾을 수 없습니다! DialogueManager 오브젝트가 배치되어 있는지 확인하세요."); } // 2. 부착된 콜라이더가 트리거(Trigger)로 체크되어 있지 않다면 강제로 설정하여 물리 막힘 현상을 배제합니다. Collider2D col = GetComponent(); if (col != null && !col.isTrigger) { col.isTrigger = true; Debug.LogWarning($"[NPC] {gameObject.name}에 부착된 Collider2D의 'Is Trigger' 속성을 자동으로 켰습니다."); } } // 플레이어가 NPC의 감지 반경(Trigger Collider) 내부로 들어왔을 때 실행 private void OnTriggerEnter2D(Collider2D other) { // 충돌한 오브젝트가 플레이어인지 검사합니다. Player player = other.GetComponent(); if (player != null) { if (dialogueManager != null) { Debug.Log($"[NPC] 플레이어({player.CharacterName})가 가까이 왔습니다. 세대({player.Generation}대) 조언을 요청합니다."); dialogueManager.RequestNPCDialogue(player.Generation); } } } // 플레이어가 NPC의 감지 반경을 벗어났을 때 실행 private void OnTriggerExit2D(Collider2D other) { Player player = other.GetComponent(); if (player != null) { if (dialogueManager != null) { Debug.Log("[NPC] 플레이어가 멀어졌습니다. 대화창을 닫습니다."); dialogueManager.CloseDialogue(); } } } }