Unity/Unity 개발

NPCController 구조 설계 정리

leedh1211 2025. 7. 7. 20:47

학습 동기

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