학습 동기
NPC와의 상호작용 시스템을 만들고자 했다. 플레이어가 특정 NPC 근처에 다가가면 툴팁이 나타나고, 상호작용 키 입력 시 각기 다른 동작을 수행하도록 설계하고 싶었다.
학습 내용
공통 동작을 담당하는 NPCController 작성
- 플레이어가 Collider 범위 내에 진입하면 툴팁 UI(TooltipPanel)을 활성화하고, NPC 상단에 표시되도록 함
- tooltipText라는 string 필드를 통해 NPC마다 고유한 툴팁 메시지를 보여줄 수 있도록 구성
- PlayerInputActions와 InputSystem을 연동하여 E 키 입력 시 Interact() 함수 호출
- 실제 상호작용 로직은 virtual 함수로 선언하고, 자식 클래스에서 override하여 각각 다르게 구현
자식 클래스 설계
CaveNPCController
- NPCController를 상속받고, Interact()를 오버라이드하여 GameManager.Instance.NextStageScene() 호출
- 상호작용 시 다음 씬으로 전환
TutorialNPCController
- NPCController를 상속받고, Interact()를 오버라이드하여 DialogueManager를 통해 비동기 대화 시작
- 대화 종료 후 마지막 대사 시퀀스를 로그로 출력
구조적 장점
- 상호작용 동작을 각 NPC의 고유 클래스로 분리하여 유연성과 확장성이 뛰어남
- 공통된 툴팁 처리 로직은 기반 클래스에서 일괄 처리
- tooltipText를 인스펙터에서 설정 가능하여 디자이너 친화적 구조
- Unity Input System과 연동하여 입력 관리가 일관되며 구조적으로 깔끔함
- 상호작용 키가 눌렸을 때 동작 분기가 자연스럽고 테스트가 용이함
느낀 점
기존에는 NPC마다 개별 스크립트를 만들어서 툴팁 처리와 상호작용을 반복적으로 구현했지만, 이번에는 공통 기능을 NPCController로 추상화하고, 개별 동작만 자식 클래스에서 override하는 방식으로 구조화하여 유지보수가 훨씬 편해졌다.
곧 ScriptableObject를 활용해 NPC 데이터를 외부에서 관리하고, 툴팁 UI를 싱글톤 형태의 전역 매니저로 분리해서 관리하는게 좋을것 같다.
'Unity > Unity 개발' 카테고리의 다른 글
| 튜토리얼 시스템과 스킬 연동 (1) | 2025.07.09 |
|---|---|
| 튜토리얼 시스템 구조 설계 및 구현 (0) | 2025.07.08 |
| 대화 다이얼로그 & 상호작용 토글 UI (0) | 2025.07.04 |
| Unity Tilemap Animator (0) | 2025.07.03 |
| Rule Tile (0) | 2025.07.02 |