Menu
CoddyTech

비배율 시간

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

일시 정지되거나 느려진 게임도 몇 가지 작업에는 실제 시계가 필요합니다. 애니메이션이 재생되는 일시 정지 메뉴, 게임이 다시 진행되기 전의 카운트다운, 저절로 끝나야 하는 정지 상태 등이 그렇습니다. Time.unscaledDeltaTime은 Time.timeScale이 얼마든 마지막 프레임 이후 흐른 실제 시간이고, Time.unscaledTime은 게임이 시작된 이후 흐른 실제 시간입니다. 이 일시 정지 메뉴는 실제 시간에 맞춰 로딩 휠을 회전시키므로 게임이 일시 정지되어 있는 동안에도 휠이 돕니다:

void Update()
{
    wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime);   // 일시 정지 여부와 관계없이 초당 반 바퀴 회전
}

코루틴에도 같은 두 가지가 있습니다. WaitForSeconds는 게임 시간을 세므로 Time.timeScale = 0이면 끝나지 않습니다. WaitForSecondsRealtime은 실제 초를 셉니다. 메뉴가 열릴 때 시작되는 이 코루틴은 0.5초마다 메뉴 제목을 깜박입니다:

IEnumerator Blink()
{
    while (true)
    {
        title.SetActive(!title.activeSelf);
        yield return new WaitForSecondsRealtime(0.5f);
    }
}

게임이 멈추면 함께 멈춰야 하는 게임플레이에는 스케일이 적용된 값을 사용하고, 일시 정지되거나 느려진 동안에도 작동해야 하는 메뉴와 애니메이션, 일시 정지를 끝내는 타이머에는 스케일이 적용되지 않은 값을 사용하세요. Invoke에는 실제 시간을 기준으로 하는 버전이 없습니다. 항상 게임 시간을 셉니다.

challenge icon

챌린지

중급

모루가 떨어질 때 잠시 게임 전체를 멈추게 하세요.

  1. Anvil.cs에서 IEnumerator HitStop()을 작성하세요. Time.timeScale = 0f;을 실행한 다음 yield return new WaitForSecondsRealtime(freezeTime);을 실행하고, 다시 1f로 설정하세요.
  2. StartCoroutine(HitStop());을 호출하는 void OnCollisionEnter(Collision collision)을 작성하세요.

‘플레이’를 누르고 Space 키로 모루를 떨어뜨리세요. 모루가 떨어질 때마다 게임이 0.3초 동안 멈춥니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using System.Collections;
using UnityEngine;

public class Anvil : MonoBehaviour
{
    public float freezeTime = 0.3f;

    // 모루가 무언가에 부딪히면 게임을 실제 시간으로 freezeTime초 동안 일시 정지합니다
}

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

직접 연습해 보세요: Unity 플레이그라운드