GameDevelop/Unity기초쌓기

[Unity] 타이머 Time.timeScale = 0f;

도도돋치 2025. 3. 30. 16:36
Contents 접기
728x90

타이머값 계산하기

GameManager 스크립트

 

전체시간 변수 선언 

float totalTime=30.0f;

 

시간이 줄어드는 것을 표현하기 위해 totalTime값을 지속적으로 일정한 값으로 빼준다.

모든 기기 들이 같은 값을 가질 수 있도록 deltaTime을 사용한다. deltaTime은 시간을 프레임 대비로 맞춰준 값이다.

void Update()
{
    //deltaTime은 시간을 프레임대비로 맞춰준 값
    totalTime -= Time.deltaTime;
}



타이머UI에 값 넣기

우선 타이머UI를 불러오기 위해 아래와 같이 text값을 선언한다.

//타이머 값을 넣어주기 위한 text컴포넌트 생성
public Text timeTxt;

 

그리고 이전에 점수를 넣어줬던 것과 같이 text값에 totalTime을 String형으로 변환하여 넣어준다. 

timeTxt.text = totalTime.ToString();

Unity로 돌아와서 GameManager클릭 후 Time Txt에 Time을 드래그 앤 드롭으로 넣어준다.


아래와 같이 시간이 잘 표시되는 것을 확인할 수 있다.


문제는 소수점 5자리까지 표시가 되고 있다는 점이다. 소수점 둘째 자리까지만 나올 수 있도록 수정해보자. 

GameManager Script의 totalTime.ToString에 문자열 "N2"를 적어준다. N2는 소수점 2번째 자리까지 나오도록 한다는 의미이다. 

 timeTxt.text = totalTime.ToString("N2");

위 코드를 추가하면 2번째 자리까지 잘 표시된다.

만약 1번째 또는 3번째 자리까지 표시하고 싶으면 N1, N3 이렇게 숫자를 바꿔주면 된다.

 

0초가 되면 게임 종료

지금은 totalTime에 별다른 조건을 달지않고 계속 빼주기만 하기 때문에 시간이 마이너스(-)까지 계속 흐르게 된다.

이번에는 0초가 됐을 때 게임을 멈춰보자.

 

GameManager 스크립트

 

아래는 게임을 멈춰주는 로직인데, 차근차근 살펴보자.

void Update()
{
    if (totalTime > 0)
    {
        totalTime -= Time.deltaTime;
    }
    else
    {
        totalTime = 0f;  
        Time.timeScale = 0f;
    }
    timeTxt.text = totalTime.ToString("N2");
}

먼저 totalTime이 0이하가 될 경우, -로 가지않고 시간을 멈춰주는 코드를 조건문(if, else)으로 작성해주었다.

Time.timeScale = 0f;

 

그리고 소수점으로 계속 빼주기 때문에 미세한 오차가 발생할 수 있으므로 "totalTime = 0f"를 통해 0으로 맞춰주었다.


Time.timeScale = 0f;

위코드는 time의 크기를 0으로 만들어준다는 뜻이다.
즉, 첫번째 프레임과 그 다음 프레임까지에 시간의 차이가 없어진다는 뜻이고, 결국 게임 시간이 멈추게 되는 효과를 연출할 수 있다.

 

결과화면

 

728x90