Menu
CoddyTech

슬로 모션

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 34번째.

0과 1 사이의 Time.timeScale은 슬로 모션입니다. 0.25에서는 Time.deltaTime이 실제 프레임 시간의 4분의 1이므로, speed * Time.deltaTime으로 움직이는 자동차는 실제 시간으로 1초마다 이동 거리의 4분의 1만큼 움직이고, 강체는 4분의 1 속도로 날아가고 떨어지며, WaitForSeconds(1f)는 실제 시간으로 4초 동안 지속됩니다. 1보다 크면 게임이 빠르게 실행됩니다. 2는 두 배속입니다.

물리에는 한 줄이 더 필요합니다. 각 물리 스텝은 여전히 게임을 Time.fixedDeltaTime만큼, 즉 게임 시간으로 0.02초만큼 진행시키며, 0.25에서는 이 시간이 실제 시간으로 0.08초가 됩니다. 따라서 FixedUpdate()는 실제 시간으로 1초에 12.5번만 실행되므로, 물체는 5프레임에 한 번씩 움직이며 끊깁니다. 스텝을 같은 비율로 줄이고, 이후 두 값을 모두 원래대로 되돌리세요. Unity는 fixedDeltaTime을 자동으로 재설정하지 않기 때문입니다. 다음 스크립트는 Space 키를 누르고 있는 동안 게임 속도를 늦춥니다.

float normalStep;

void Awake()
{
    normalStep = Time.fixedDeltaTime;   // 새 프로젝트에서는 0.02
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Time.timeScale = 0.25f;
        Time.fixedDeltaTime = normalStep * Time.timeScale;
    }
    if (Input.GetKeyUp(KeyCode.Space))
    {
        Time.timeScale = 1f;
        Time.fixedDeltaTime = normalStep;
    }
}

스텝이 더 작아져도 물리는 실제 시간으로 1초에 50번 스텝을 진행하고, 각 스텝은 게임 시간의 4분의 1만큼을 처리하므로 슬로 모션이 부드럽게 유지됩니다. 스텝은 게임 시간 단위이므로, Time.deltaTime을 사용하는 FixedUpdate()의 코드는 수정하지 않고 그대로 작동합니다.

challenge icon

챌린지

중급

혜성이 하늘을 가로지르고, Space를 누르면 왼쪽에서 발사됩니다(Launcher.cs, 준비 완료). 이동하는 동안 혜성은 트리거 박스인 SlowZone을 통과하며, 비행의 해당 구간은 슬로 모션으로 재생되어야 합니다. SlowZone.cs를 작성하세요:

  • 무언가 영역에 들어오면 게임 시간이 slowScale(Inspector에서 0.4)로 흐르고, 혜성이 여전히 부드럽게 움직이도록 물리 시간 단계도 0.02에서 같은 비율만큼 줄어듭니다.
  • 영역을 벗어나면 시간이 다시 정상 속도로 흐르고, 물리 시간 단계도 0.02로 돌아갑니다.

Play를 누르고, Space를 눌러 혜성이 통과하는 모습을 본 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class SlowZone : MonoBehaviour
{
    public float slowScale = 0.4f;

    // 무언가가 구역 안에 있는 동안 슬로 모션 적용
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

실제 게임 만들기의 모든 레슨