타이머값 계산하기
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으로 만들어준다는 뜻이다.
즉, 첫번째 프레임과 그 다음 프레임까지에 시간의 차이가 없어진다는 뜻이고, 결국 게임 시간이 멈추게 되는 효과를 연출할 수 있다.
결과화면
'GameDevelop > Unity기초쌓기' 카테고리의 다른 글
[Unity] 점수감소되는 빨간빗방울 추가하기 (0) | 2025.04.01 |
---|---|
[Unity] EndPanel켜고 게임 다시시작 SetActive(),LoadScene() (0) | 2025.03.31 |
[Unity] 게임종료UI (0) | 2025.03.29 |
[Unity] 올라가는 점수값 UI표시 - Text타입 (0) | 2025.03.29 |
[Unity] 충돌체크로 점수 증가 AddScore() (0) | 2025.03.28 |