본문 바로가기
게임 개발/Unity3D

[Unity | 유니티] Time.deltaTime

by 불타는홍당무 2016. 1. 19.


Time.deltaTime => Time.smoothDeltaTime을 사용할 것을 추천!

이전 프레임에서부터 현재 프레임까지 걸린 시간

 

사용 목적
컴퓨터의 성능에 따라 Update함수를 호출하는 횟수가 다르다. 예를 들어 성능이 좋은 컴퓨터는 1초당 30프레임을 호출한다고 하면 성능이 좋지 않은 컴퓨터는 1초당 30프레임 이하를 호출할 것이다. 

아래와 같은 코드를 생각해 보자.

int movingDistance = 0;

int speed=1; 

void Update(){ 
      movingDistance += speed; 
      Debug.Log(movingDistance); 


당연히 컴퓨터 성능에 따라 1초당 movingDistance의 값이 다를 것이다. 왜냐하면 성능이 좋은 컴퓨터는 처리속도가 빨라서 1초당 Update 함수를 많이 호출할테고 반대로 느린 컴퓨터는 1초당 적은 회수를 호출하기 때문이다. 그렇다면 컴퓨터의 성능에 따라 동일한 시간 동안 캐릭터가 이동하는 거리는 상이하게 된다. 이 문제를 해결하기 위해 Time.deltaTime을 사용해야 하는 것이다.

이제 속도가 빠른 컴퓨터는 전 프레임과 다음 프레임간의 시간 차가 0.1초라고 하고 느린 컴퓨터는 0.5초라고 가정하자. 만약 Time.deltaTime을 이용하지 않게 되면 위의 코드에서 빠른 컴퓨터는 1초일때 movingDistance의 값이 10이 되지만 느린 컴퓨터는 1초일때 2가 된다. 그렇다면 movingDistance += speed부분을 movingDistance += speed * Time.deltaTime;으로 고치면 어떨까? 느린컴퓨터도 1초일 때 1이라는 값을 얻을 수 있고 빠른 컴퓨터도 1초일 때 movingDistance에서 1이라는 값을 얻을 수 있을 것이다. 이게 바로 Time.deltaTime을 사용하는 목적이다.