TIL: Unity 대화 시스템 완전 구축 & 트러블슈팅 🎮
1. 설계서 기반 시스템 아키텍처 설계
DialogueManager (메인 로직) ├── DialogueInputManager (입력 처리) ├── DialogueUI (UI 관리) ├── TypewriterEffect (타이핑 효과) └── DialogueDatabase (데이터 관리)
- 설계서를 코드로 변환하는 과정의 중요성 체감
- 각 컴포넌트에 단일 책임 원칙(SRP) 적용
- 이벤트 기반 통신으로 느슨한 결합 구조 구현
2. 싱글톤 vs 계층적 구조 선택
기존 구조: GameManager → PlayManager → DialogueManager
- 기존 시스템과 일관성 유지
- PlayManager에서 생명주기 관리
- 씬별 독립적인 DialogueManager 운영
3. CSV 연동 시스템 구축
// IGetCSVData 인터페이스 구현
public class DialogueData : IGetCSVData {
public string ID { get; set; }
}
DialogueDB = CSVConverter.LoadDialogues(LoadCsvFile("Dialogues"));
- 인터페이스로 데이터 구조 표준화
- 필드를 프로퍼티로 변경해 CSV 연동 최적화
- 가중치 기반 랜덤 시스템 도입
4. 주요 트러블슈팅
문제 1: Input 시스템 충돌
// DialogueInputManager.Update()의 ESC 키 감지 제거로 해결
전역 키 입력 감지 시 다른 시스템과의 간섭 고려 필요
문제 2: 싱글톤 일관성 문제
DialogueDatabase를 Static 클래스로 변경해 구조 통일
문제 3: 메서드 시그니처 충돌
ShowLine 메서드를 객체 기반 매개변수 구조로 통합
5. 코드 리뷰 개선 사항
- 문자열 대신 Enum 사용으로 타입 안전성 확보
- 반복 접근 대신 인스턴스 캐싱
- 매개변수 그룹화로 메서드 호출 단순화
6. 최종 성과
- IInteractable 인터페이스로 NPC 대화 연동
- 자동 아웃라인(하이라이트) 기능 구현
- DialogueManager 부재 시 안전한 폴백 처리
7. 연관 기술
- Unity Input System - 모드별 입력 전환
- CSV 데이터 파이프라인 - 인터페이스 기반 설계
- Event-Driven Architecture - 느슨한 결합
- Command / Strategy 패턴 - 유연한 기능 확장
8. 결론
설계 → 구현 → 테스트 → 피드백 → 개선의 사이클을 반복하며, 기존 시스템과의 통합성 유지가 핵심임을 확인.
'팀스파르타 내일배움캠프' 카테고리의 다른 글
| [기획 TIL] 1일차: 매력적인 게임의 첫인상, 'One Pager' (4) | 2025.08.05 |
|---|---|
| C# 객체지향 및 이벤트 개념 심화 정리 (1) | 2025.08.04 |
| 면접 복기 TIL (3) | 2025.08.02 |
| [TIL] 경험을 위한 기술, 기술을 위한 경험: 나의 개발 북극성을 찾아서 (3) | 2025.07.23 |
| [TIL] 데이터의 확장성과 시스템의 안정성, 두 마리 토끼를 잡다 (1) | 2025.07.22 |