코딩의 신 54

김동관·2025년 12월 17일

오늘 한 일

  • 인트로 구현 (뼈대 완료, 인트로 씬에 맵을 보이는곳만 필요하기 때문에 카메라에 들어오지 않는 요소들은 삭제)
  • 맵 추가 (80프로 완료)

오늘은 인트로의 뼈대를 완성하며, 시작하는 맵까지 추가를 해보았습니다.

Intro 연출 구현

눈 깜빡임 시스템 구현

검은 화면(눈 감김) 상태에서 시작

천천히 눈을 뜬 뒤, 다시 의식이 가라앉듯 천천히 감기는 연출 추가

Fade 기반으로 속도 조절 가능하도록 구성

카메라 회전 연출

시점이 왼쪽 / 오른쪽으로 이동하는 컷씬 카메라 회전 구현

카메라가 거의 다 회전했을 때 눈이 감기도록 타이밍 조정

과도한 구조 분리 없이 WaitForSeconds와 회전 시간 분할로 간단하게 해결

대사 출력

UI 패널 없이 TextMeshPro 텍스트만 사용

컷 전환 사이에 자연스럽게 독백 대사 출력

스토리 & 씬 구조 고민

스토리 흐름을 기준으로 IntroScene의 역할을 명확히 정의

IntroScene은 “사건의 시작과 분위기 전달”까지만 담당

최종 보스 조우 / 사망 / 마을 치료는 다음 씬(튜토리얼/초반 플레이)로 분리하는 방향으로 결정

플레이어가 조작을 배운 직후 바로 죽는 구조를 피하고,
납득 가능한 스토리 전개와 게임 시작 지점을 분리하기로 함

씬 구성 및 리소스 관리 정리

IntroScene 전용 오브젝트(폭풍, 비, 바람, 오디오 등)는 프리팹화하지 않기로 결정

재사용 목적이 없고, 씬 종속 연출이기 때문

IntroScene 맵은 보이는 영역만 유지

캐릭터가 누워 있고 이동이 없는 연출이므로

뒤쪽/사용되지 않는 지형 및 오브젝트는 제거

성능 부담 감소 + 씬 역할 명확화

정리

IntroScene을 “플레이 공간”이 아닌 연출용 무대로 정의

불필요한 복잡도 없이도 충분히 몰입감 있는 오프닝 연출 구현

이후 씬(튜토리얼/메인 시작부)과의 연결 구조가 명확해짐

주요 기능별 코드 설명

  1. 눈 깜빡임 / 암전 연출 시스템
IEnumerator Fade(float from, float to, float time)
void SetAlpha(float a)

기능 설명

UI Image(eyeImage)의 Alpha 값을 조절해

눈 감김 (검은 화면)

눈 뜸 (시야 복구)
연출을 구현

Fade() 코루틴으로 속도 조절 가능

연출용이므로 타이핑/물리 영향 없이 안전

  1. 첫 연출 전용 “천천히 다시 감기” 기능 추가
IEnumerator SlowClose()
{
    yield return Fade(0f, 1f, 2.2f);
    yield return new WaitForSeconds(0.3f);
}

일반 깜빡임(Blink)과 분리된 Intro 전용 감김 연출

의식이 가라앉듯 천천히 눈을 다시 감는 연출

첫 장면에서만 사용

컷씬 카메라 회전 제어

IEnumerator RotateCamera(Quaternion from, Quaternion to, float time)

기능 설명

카메라 Transform을 Quaternion.Slerp로 회전

Intro 컷씬에서 시선 이동 연출 담당

Inspector에서 회전값을 직접 지정 가능 (leftRotation, rightRotation)

cameraTransform.rotation = Quaternion.Slerp(from, to, t / time);

“회전 거의 끝난 후 눈 감기” 타이밍 조절

구현 방식

복잡한 로직 추가 없이

회전 시간을 분할 + WaitForSeconds로 해결

yield return RotateCamera(cameraTransform.rotation, leftRotation, 0.8f);
yield return new WaitForSeconds(0.2f);
yield return Fade(0f, 1f, 0.5f);

효과

카메라가 거의 다 돌아간 시점에 눈 감기 시작

컷 전환 느낌 강화

코드 복잡도 최소화

profile
아이디어 뱅크

0개의 댓글