Menu
CoddyTech

timeScale로 일시 정지

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

Time.timeScale은 게임 시간이 흐르는 속도입니다. 1은 정상 속도이고 0은 시간을 멈춥니다. 0일 때는 Time.deltaTime이 0이므로 speed * Time.deltaTime으로 작성된 모든 움직임이 멈춥니다. FixedUpdate()도 더 이상 호출되지 않아 Rigidbody가 공중에 멈춰 있고, 게임 시간을 기준으로 작동하는 WaitForSeconds와 Invoke도 대기합니다. 이 스크립트는 On Click 목록에서 TogglePause를 호출하는 버튼으로 일시 정지를 전환하고, 일시 정지 중에는 패널을 표시합니다.

public class PauseToggle : MonoBehaviour
{
    public GameObject pausePanel;
    bool paused;

    public void TogglePause()
    {
        paused = !paused;
        Time.timeScale = paused ? 0f : 1f;
        pausePanel.SetActive(paused);
    }
}

모든 것이 멈추는 것은 아닙니다. Update()와 LateUpdate()는 매 프레임 계속 호출되지만, 이때 Time.deltaTime은 0입니다. 코루틴의 yield return null은 여전히 다음 프레임에 다시 실행되고, UI는 계속 클릭을 받으므로 버튼을 눌러 일시 정지를 해제할 수 있습니다. 키 입력도 계속 읽힙니다. 따라서 Update()에서 Space 키를 누르면 점프하는 개구리는 일시 정지 중에 키 입력을 받아 두었다가, 일시 정지 해제 후 첫 물리 업데이트에서 뛰어오릅니다. 이 스크립트는 시간이 멈춰 있는 동안 키 입력을 무시합니다.

void Update()
{
    if (Time.timeScale == 0f) return;   // 일시 정지 상태: 키 입력 무시
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
    }
}

Time.timeScale은 장면이 아니라 게임 전체에 적용됩니다. 값이 0인 상태에서 다른 장면을 불러오면 새 장면도 일시 정지된 상태로 시작합니다. 레벨을 다시 시작하거나 종료하는 메뉴 버튼은 먼저 값을 1로 되돌립니다.

challenge icon

챌린지

중급

테니스 코트의 공 발사 장치는 왼쪽 및 오른쪽 화살표 키로 회전하고 Space 키를 누르면 공을 발사합니다(BallMachine.cs). 코트에 일시 정지 메뉴를 추가하세요(PauseMenu.cs). 씬에서 Pause 버튼은 Pause()에 연결하고, 숨겨진 PausePanel에 있는 Resume 버튼은 Resume()에 연결합니다. Inspector에서 패널을 panel에 할당합니다.

  • Pause()는 게임 시간을 멈추고 패널을 표시합니다.
  • Resume()은 게임 시간을 정상 속도로 되돌리고 패널을 숨깁니다.
  • BallMachine.cs에서 게임이 일시 정지된 동안 Space 키를 눌러도 공을 발사하면 안 됩니다. 회전 코드는 Time.deltaTime을 사용하므로 변경할 필요가 없습니다.

Play를 눌러 공을 발사하고 공중에 있는 동안 일시 정지한 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class PauseMenu : MonoBehaviour
{
    public GameObject panel;

    public void Pause()
    {
        // 게임 시간을 멈추고 panel을 표시합니다
    }

    public void Resume()
    {
        // 게임 시간이 다시 정상 속도로 흐르고 panel은 숨겨집니다
    }
}
quiz icon실력 점검

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

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