비배율 시간
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 35번째.
일시 정지되거나 느려진 게임에서도 일시 정지 메뉴의 애니메이션, 게임 재개 전 카운트다운, 저절로 끝나야 하는 정지 효과처럼 몇 가지 작업에는 실제 시계가 필요합니다. 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에는 실제 시간 버전이 없습니다. 항상 게임 시간을 셉니다.
챌린지
중급히트 스톱은 강한 타격이 묵직하게 느껴지도록 합니다. 충격이 발생하면 게임 전체가 잠깐 멈춥니다. 화살표 키로 드로퍼를 움직이고 스페이스바를 누르면 드로퍼에서 모루가 떨어집니다(Dropper.cs는 준비되어 있습니다). 각 모루에 들어갈 Anvil.cs를 작성하세요.
- 모루가 무엇이든 부딪히면 게임을 멈춥니다:
Time.timeScale을 0으로 설정합니다. freezeTime초의 실제 시간이 지난 뒤(Inspector에서 0.3으로 설정), 값을 다시 1로 설정합니다.
Play를 누르고 모루를 몇 개 떨어뜨린 다음 Check를 누르세요.
직접 해보기
using System.Collections;
using UnityEngine;
public class Anvil : MonoBehaviour
{
public float freezeTime = 0.3f;
// 모루가 무언가에 부딪히면 게임을 실제 시간으로 freezeTime초 동안 일시 정지합니다
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.