호우동의 개발일지

Today :

article thumbnail


Time.deltaTime은 유니티에서 딜레이 계산 등의 시간 계산에서 항상 쓰이는 변수이다.
그런데 정확히 deltaTime이 무엇이고 이걸 굳이 왜 사용해야 할까?

 

 

deltaTime이란?


deltaTime이 무엇인가를 이해하기 위해서는 fps를 먼저 알아야 한다.

fps란 frames per second를 뜻하는데 1초에 몇 프레임인가 쉽게 말해서
'1초에 화면이 몇 번 다시 그려지게 되는가?'를 뜻한다.

예를 들어 30 fps라면 1초에 30번 화면이 그려진다는 것이기 때문에
fps가 높을수록 화면이 부드럽게 움직인다.

즉 웬만하면 fps가 높은 것이 좋다고 할 수 있다.

화면이 다시 그려지는 데는 당연히 짧지만 시간이 소요된다.
이를 간격이라는 표현을 사용한다면 그 간격이 바로 deltaTime이다.

즉, deltaTime이란 프레임 간 이동 사이의 시간 간격을 의미한다.

참고용 그림
참고용 그림

20 fps를 그림으로 나타내보면 이런 식이다.

막대기를 1 frame으로 보고 오른쪽으로 시간이 경과된다고 가정했을 때
화면 전환 그 사이의 간격을 deltaTime이라고 한다.

이때 deltaTime을 계산해 보면 1초에 20번이기 때문에,
deltaTime = 1/20s가 된다고 할 수 있다.

 

 


왜 사용해야 할까?

위의 deltaTime을 계산한 것을 보면
'fps만 알면 곧바로 deltaTime을 알 수 있는데 굳이 deltaTime을 써야 하나?'
이렇게 생각할 수도 있다.

deltaTime을 사용하는 이유는 컴퓨터 성능에 따라 fps가 달라지기 때문이다.

어떤 컴퓨터는 환경에 따라 60 fps일수도 있고
또 성능이 좋아지면 120 fps 일수도 있다.

이때 A컴퓨터(60 fps) B컴퓨터(120 fps)가 있다고 예를 들어 생각해 보자.

void Update()
    {
        totalTime += 1/60;
        if(totalTime > 1)
        {
        	Debug.Log("메세지 호출");
            totalTime = 0;
        }
    }

deltaTime을 사용하지 않고 시간 간격을 1/60으로 설정해 놨다.

Update문은 1 프레임당 호출되는 것이기 때문에,
A컴퓨터에서는 Update 1초에 60번, B컴퓨터에서는 1초에 120번 호출한다.

즉, 해당 함수에서 A컴퓨터는 "메시지 호출"이 한 번만 나오고, 
B컴퓨터에서는 두 번이 나오게 된다.

이런 식으로 fps가 달라지는 것만으로도 다른 결과가 나올 수도 있기 때문에
컴퓨터마다 fps를 알고 계산하는 것이 필수다.

유니티에서는 Time.deltaTime을 통해 현재 자동으로 fps를 알고, deltaTime을 계산해준다.

따라서
모든 컴퓨터마다 일정하게 시간간격을 가질수 있어,
시간을 통일성 있게 사용할 수 있게 해 준다.

요약하자면,
Time.deltaTime은 fps에 따라 자동으로 시간간격을 계산해 줌으로써,
fps가 다름으로 인해 발생할 수 있는 오류를 방지해 준다.