오늘 한 일
오늘은 게임 초반 튜토리얼 흐름과 스토리 대사 연출을 중심으로 작업했다.
단순 UI 안내가 아니라, 카메라 연출 + 대사 + 플레이 입력이 자연스럽게 이어지도록 구조를 잡는 데 초점을 맞췄다.
✔ Dialogue JSON 구조 통일
DialogueID, SpeakerID, SpeakerName, Text, NextID, IsChoice 형태로 통일
기존에 ID / DialogueID가 섞여 있던 문제로 인해 Dictionary key null 에러 발생 → 구조 통일로 해결
✔ NextID 연결 방식 이해
NextID == "" → 해당 대사가 마지막 대사
다음 대사를 추가하려면 반드시:
"NextID": "다음_DialogueID"
형태로 연결해야 함
이로 인해 성소 대사에서 다음 대사가 안 나오던 문제 해결
✔ TriggerZone 진입 시 연출 흐름
플레이어가 성소 근처 TriggerZone 진입
카메라가 성소를 향해 한 번 확대(FocusOnce)
카메라 복귀
DialogueCanvas로 NPC 대사 출력
“이런 곳에 이렇게 불길한 성소가 있다니…”
-> 튜토리얼 UI가 아닌 스토리 대사 느낌으로 연출
✔ 튜토리얼 단계를 enum으로 관리
enum Step { Move, Jump, Attack, Done }
✔ 단계별 입력 처리
Move: WASD 한 번씩 입력
Jump: Space 입력
Move Forward: 월드 화살표 표시
Attack:
우클릭: 무기 꺼내기
좌클릭: 공격 → 즉시 튜토리얼 종료
✔ 핵심 포인트
튜토리얼은 “정확한 판정”보다 플로우와 템포를 우선
공격 튜토리얼은 좌클릭 한 번이면 바로 종료하도록 단순화
✔ WorldArrowController
플레이어 위치 기준으로 항상 목표(상자/성소)를 가리키는 화살표
플레이어가 이동해도 방향이 계속 갱신됨
✔ 사용 흐름
이동 튜토리얼 완료 시 화살표 ON
상자와 상호작용(F키) 시 화살표 OFF
✔ ChestInteractable에서 처리
상자 Interact() 시:
애니메이션 실행
보상 지급
월드 화살표 비활성화
튜토리얼 트리거에서 상자 참조를 억지로 잡지 않고,
상자 스크립트 내부에서 연출 마무리하도록 구조 단순화
✔ 가장 단순한 방식 채택
공격 튜토리얼 중:
if (Input.GetMouseButtonDown(0))
CompleteAttackTutorial();
공격 성공 판정까지는 보지 않고,
“공격을 시도했다”는 행위 자체로 튜토리얼 종료
-> 복잡도 ↓, 플레이 흐름 ↑
오늘 작업 핵심 요약
Dialogue JSON 구조 정리 & NextID 연결 방식 명확화
성소 Trigger → 카메라 확대 → NPC 대사 연출 구현
TutorialManager를 enum 기반 상태 머신으로 정리
월드 화살표 가이드 구현 및 상호작용 시 제거
공격 튜토리얼을 단순하고 빠르게 종료하도록 설계