코딩의 신 60

김동관·2025년 12월 26일

오늘 한 일

Unity 튜토리얼 & 대사 연출 시스템 구현 정리

오늘은 게임 초반 튜토리얼 흐름과 스토리 대사 연출을 중심으로 작업했다.
단순 UI 안내가 아니라, 카메라 연출 + 대사 + 플레이 입력이 자연스럽게 이어지도록 구조를 잡는 데 초점을 맞췄다.

1. Dialogue 시스템 개선 & JSON 데이터 구조 정리

✔ Dialogue JSON 구조 통일

DialogueID, SpeakerID, SpeakerName, Text, NextID, IsChoice 형태로 통일

기존에 ID / DialogueID가 섞여 있던 문제로 인해 Dictionary key null 에러 발생 → 구조 통일로 해결

✔ NextID 연결 방식 이해

NextID == "" → 해당 대사가 마지막 대사

다음 대사를 추가하려면 반드시:

"NextID": "다음_DialogueID"

형태로 연결해야 함

이로 인해 성소 대사에서 다음 대사가 안 나오던 문제 해결

2. 성소 트리거 연출 구현 (카메라 + 대사)

✔ TriggerZone 진입 시 연출 흐름

플레이어가 성소 근처 TriggerZone 진입

카메라가 성소를 향해 한 번 확대(FocusOnce)

카메라 복귀

DialogueCanvas로 NPC 대사 출력

“이런 곳에 이렇게 불길한 성소가 있다니…”

-> 튜토리얼 UI가 아닌 스토리 대사 느낌으로 연출

3. TutorialManager 구조 설계

✔ 튜토리얼 단계를 enum으로 관리

enum Step { Move, Jump, Attack, Done }

✔ 단계별 입력 처리

Move: WASD 한 번씩 입력

Jump: Space 입력

Move Forward: 월드 화살표 표시

Attack:

우클릭: 무기 꺼내기

좌클릭: 공격 → 즉시 튜토리얼 종료

✔ 핵심 포인트

튜토리얼은 “정확한 판정”보다 플로우와 템포를 우선

공격 튜토리얼은 좌클릭 한 번이면 바로 종료하도록 단순화

4. 월드 화살표 가이드 구현

✔ WorldArrowController

플레이어 위치 기준으로 항상 목표(상자/성소)를 가리키는 화살표

플레이어가 이동해도 방향이 계속 갱신됨

✔ 사용 흐름

이동 튜토리얼 완료 시 화살표 ON

상자와 상호작용(F키) 시 화살표 OFF

5. 상자(Chest) 상호작용 연출 정리

✔ ChestInteractable에서 처리

상자 Interact() 시:

애니메이션 실행

보상 지급

월드 화살표 비활성화

튜토리얼 트리거에서 상자 참조를 억지로 잡지 않고,
상자 스크립트 내부에서 연출 마무리하도록 구조 단순화

공격 튜토리얼 UI 자동 종료

✔ 가장 단순한 방식 채택

공격 튜토리얼 중:

if (Input.GetMouseButtonDown(0))
    CompleteAttackTutorial();

공격 성공 판정까지는 보지 않고,
“공격을 시도했다”는 행위 자체로 튜토리얼 종료

-> 복잡도 ↓, 플레이 흐름 ↑

오늘 작업 핵심 요약

Dialogue JSON 구조 정리 & NextID 연결 방식 명확화

성소 Trigger → 카메라 확대 → NPC 대사 연출 구현

TutorialManager를 enum 기반 상태 머신으로 정리

월드 화살표 가이드 구현 및 상호작용 시 제거

공격 튜토리얼을 단순하고 빠르게 종료하도록 설계

profile
아이디어 뱅크

0개의 댓글