오늘 한 일
중간 점검이 있었습니다.
제가 한 일을 정리해서 알려드리겠습니다.
애니메이션 연출에 대해서 알려드리겠습니다.
애니메이션 연출
실제 플레이어를 잠깐 숨기고(Disable) → 컷씬 전용 가짜 배우(프리팹)들을 스폰해서 연출 → 끝나면 실제 플레이어를 결과 위치로 복구
실제 플레이어(Real Player)는 조작/카메라/충돌/상태가 복잡하니 컷씬 동안 잠깐 비활성화하고,
컷씬 전용 가짜 Player/NPC를 프리팹으로 생성해서 연출만 담당하게 만든 뒤,
컷씬 끝나면 실제 플레이어를 컷씬 결과 위치로 텔레포트해서 자연스럽게 이어준다.
이 방식의 장점:
게임 플레이 로직(입력, 전투, 스탯, 인벤토리 등)과 컷씬 로직이 섞이지 않음
컷씬 도중 “F 연타 / 상호작용 / 공격 / UI 겹침” 같은 사고를 깔끔하게 차단 가능
컷씬 배우 애니메이션/이동/카메라를 “연출용”으로만 단순하게 다룰 수 있음
cutscenePlayerPrefab
실제 플레이어와 외형/애니메이션은 같거나 유사
하지만 “입력/전투/상호작용” 같은 게임 로직은 없음 (또는 꺼져있음)
컷씬에서 걷기 애니 + Transform 이동만 담당
cutsceneNpcPrefab
NPC 외형/애니메이션 컨트롤러 포함
컷씬에서 같이 걷고 대사 타이밍에 연출의 대상이 됨
cutsceneSpawnPoint : 컷씬 플레이어 시작 위치
npcSpawnPoint : 컷씬 NPC 시작 위치
ShrineCutsceneManager
이 컷씬의 “감독” 역할
컷씬 시작/진행/종료 전 과정을 한 코루틴(Co_PlayCutscene)으로 통제
담당하는 기능:
실제 플레이어/플레이 카메라/UI 비활성화
컷씬 UI(레터박스 + 대사텍스트) 활성화
컷씬 카메라 활성화 + 모드 전환(3가지 연출)
컷씬 배우들(가짜 플레이어 + NPC) 생성
이동 로직(각자 속도 분리)
대사 타임라인(하드코딩)
“이동 종료 + 대사 종료” 둘 다 끝나면 컷씬 종료
컷씬 종료 시 실제 플레이어를 컷씬 마지막 위치로 복구
ShrineCutsceneTrigger
트리거 들어오면 cutscene.PlayCutscene();
한 번만 재생되도록 trigger 오브젝트를 꺼버림 gameObject.SetActive(false);
이게 컷씬 재진입(=F연타/재트리거) 같은 문제를 예방해줌.
BottomBar가 검은색으로 올라오는 “레터박스” 연출
TMP_Text dialogueText를 BottomBar 위에 배치해서 대사 표시
Co_OpenLetterbox() / Co_CloseLetterbox()에서 바 높이를 Lerp로 조절
0) 트리거 진입
ShrineCutsceneTrigger.OnTriggerEnter
→ ShrineCutsceneManager.PlayCutscene()
1) 컷씬 시작 준비
realPlayer 비활성화
playerCamera 비활성화
playerUIRoot 비활성화
cutsceneUIRoot 활성화
cutsceneCamera 활성화
2) 레터박스 오픈
yield return Co_OpenLetterbox();
3) 컷씬 배우 생성
Instantiate(cutscenePlayerPrefab, cutsceneSpawnPoint...)
Instantiate(cutsceneNpcPrefab, npcSpawnPoint...)
4) 애니 재생
Animator.Play("CS_WalkToShrine")
Animator.Play("CS_Walk")
(우리가 Animator state name 불일치 때문에 State could not be found도 겪었지 → 컨트롤러/State 이름 맞춰 해결)
5) 이동 루프
목표점 walkEndPoint까지
Player는 playerWalkSpeed, NPC는 npcWalkSpeed
이동은 Transform 기반 (NavMesh 없이 연출용으로 단순)
6) 동시에 대사 타임라인 실행
StartCoroutine(Co_PlayDialogue())
대사 진행 중 특정 문장에서 cameraMode를 바꾸며 카메라 연출 전환
7) 컷씬 종료 조건
movementFinished && dialogueFinished
둘 다 true가 될 때 종료
8) 컷씬 종료 처리
컷씬 배우 Destroy
실제 플레이어를 컷씬 배우 최종 위치/회전으로 복구
UI 복구, 카메라 복구
레터박스 닫기