오늘 한 일
Unity 튜토리얼 상호작용 문제 해결 정리 (Chest & Arrow 이슈)
오늘은 튜토리얼 구간에서 상자(Chest) 상호작용과 화살표(WorldArrow) 연출이 꼬이는 문제를 해결했다.
결론부터 말하면, 복잡한 구조 문제가 아니라 아주 단순한 실행 순서 문제였다.
WeaponChest를 열면 정상적으로:
상자가 열리고
튜토리얼 화살표가 몬스터를 가리킴
하지만 이후 F 키를 한 번 더 누르면
화살표가 갑자기 사라짐
상자는 이미 열렸는데도 Interact()가 다시 호출되면서
튜토리얼 흐름이 깨지는 현상이 발생
처음에 잘못 접근했던 방향
문제를 보면서 아래 같은 생각을 했었다:
튜토리얼 상태 플래그가 필요한가?
F 키 입력을 막아야 하나?
WeaponChest / AppleChest를 분기해야 하나?
TutorialManager에서 상태를 더 세분화해야 하나?
→ 결과적으로 전부 과한 접근이었다.
문제의 핵심은 ChestInteractable.Interact() 안에 있던 이 코드였다:
if (worldArrow != null && worldArrow.gameObject.activeSelf)
{
worldArrow.gameObject.SetActive(false);
}
이 코드가:
상자가 이미 열렸든 말든
F 키를 누를 때마다 실행되면서
화살표를 계속 꺼버리고 있었음
그리고 그 뒤에야 isOpened 체크를 하고 있었기 때문에
“두 번째 F 입력”에서 문제가 발생했던 것.
핵심 원칙
이미 열린 상자는 완전히 무시한다
Chest는 화살표를 제어하지 않는다
수정한 Interact 코드
public void Interact(PlayerInteraction player)
{
// 이미 열렸으면 아무 일도 하지 않음
if (openOnlyOnce && isOpened)
return;
isOpened = true;
if (animator != null)
animator.SetTrigger(openTriggerName);
GiveReward(player);
// 튜토리얼 흐름만 알림 (화살표는 TutorialManager가 관리)
TutorialManager.Instance.ShowMoveForwardText();
}
제거한 코드
worldArrow.gameObject.SetActive(false);
결과
WeaponChest를 열면:
화살표가 몬스터를 가리킴
이후 F 키를 몇 번 눌러도:
상자는 무시됨
화살표는 그대로 유지됨
튜토리얼 흐름이 자연스럽게 이어짐
-> 추가적인 상태 플래그나 입력 차단 로직 없이 해결
“두 번째 입력에서 문제가 생긴다” →
대부분 상태 설계 문제가 아니라 실행 순서 문제
Manager / 플래그 / 구조를 늘리기 전에
if 문 위치부터 다시 보자
튜토리얼 오브젝트는
-> 자기 역할만 하게 두는 게 제일 안정적
마무리
오늘 문제는 어렵지 않았는데,
문제를 어렵게 바라보면서 스스로 꼬이게 만든 케이스였다.
결국 해결은
if 한 줄 위치 + 쓸데없는 코드 삭제
그래도 덕분에
튜토리얼 상호작용 구조를 한 번 더 정리할 수 있었던 하루였다.