상호작용이 불가능한 상태에서도 모달 UI가 나타나도록 변경

This commit is contained in:
2026-02-12 14:49:18 +09:00
parent 2bb4797ec5
commit b32cc925e3
5 changed files with 124 additions and 14 deletions

View File

@@ -12,6 +12,7 @@ namespace Northbound
[SerializeField] private PlayerInteraction playerInteraction;
private IInteractable _currentInteractable;
private IInteractable _previousUnavailableInteractable;
private bool _isEnabled = false;
private void Awake()
@@ -33,14 +34,13 @@ namespace Northbound
FindModalComponent();
if (interactableModal != null)
{
interactableModal.HideModal();
}
else
if (interactableModal == null)
{
Debug.LogError("[InteractableModalManager] InteractableModal is still null in Start!");
}
// Start()에서 HideModal()을 호출하지 않음 - 첫 번째 Update에서 Modal이 표시되지 않는 문제 방지
// modalPanel과 unavailablePanel은 InteractableModal.Start()에서 이미 false로 설정됨
}
private void FindModalComponent()
@@ -88,16 +88,26 @@ namespace Northbound
_isEnabled = true;
IInteractable detectedInteractable = GetDetectedInteractable();
IInteractable unavailableInteractable = playerInteraction.CurrentUnavailableInteractable;
if (detectedInteractable != _currentInteractable)
bool interactableChanged = detectedInteractable != _currentInteractable;
bool unavailableChanged = unavailableInteractable != _previousUnavailableInteractable;
if (interactableChanged || unavailableChanged)
{
_currentInteractable = detectedInteractable;
_previousUnavailableInteractable = unavailableInteractable;
if (_currentInteractable != null)
{
Debug.Log($"[InteractableModalManager] Show modal for interactable");
ShowModal(_currentInteractable);
}
else if (unavailableInteractable != null)
{
Debug.Log($"[InteractableModalManager] Show unavailable message");
ShowUnavailableMessageModal(unavailableInteractable);
}
else
{
Debug.Log($"[InteractableModalManager] Hide modal");
@@ -149,6 +159,14 @@ namespace Northbound
}
}
private void ShowUnavailableMessageModal(IInteractable interactable)
{
if (interactableModal != null)
{
interactableModal.ShowUnavailableMessage(interactable);
}
}
private void UpdateModalContent()
{
if (interactableModal != null)