슬로 모션
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 35번째.
Time.timeScale이 0과 1 사이면 슬로 모션입니다. 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()의 코드는 변경 없이 계속 작동합니다.
챌린지
중급혜성이 SlowZone을 통과하는 모습을 슬로 모션으로 플레이해 보세요.
SlowZone.cs에서void OnTriggerEnter(Collider other)를 작성하세요.Time.timeScale을slowScale로,Time.fixedDeltaTime을0.02f * slowScale로 설정하세요.void OnTriggerExit(Collider other)를 작성하세요. 값을 각각1f와0.02f로 되돌리세요.
‘플레이’를 누르고 스페이스바를 누르세요. 혜성이 구역을 0.4배 속도로 미끄러지듯 통과합니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// 무언가가 구역 안에 있는 동안 슬로 모션 적용
}
실제 게임 만들기의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드