본문 바로가기

유니티 3D기본(Roll A Ball)

8. Time.deltaTime (델타타임)

델타타임은 사용자의 컴퓨터 성능에 따라 변하는 값입니다.

 

유니티 라이프 사이클 글에서 Update함수가 1초에 프레임 수 만큼 실행된다고 말했습니다.

그런데 이 프레임은 컴퓨터 성능에 의해 결정되므로, 컴퓨터 성능이 낮다면, 프레임 역시 낮고, 반대로 높다면 프레임 또한 높아집니다. 이렇게 되면 Update 함수의 호출 횟수가 달라지기 때문에, 멀티플레이를 할 때 심각한 문제가 생깁니다.

 

카트라이더를 한다고 가정해 봅시다. 앞으로 전진하는 코드가 Update 함수에 있다고 하면, 고성능 유저는 Update에 있는 주행코드가 1초에 120번 실행돼 같은 시간에 저성능 유저에 비해 훨씬 멀리 갈 것입니다. 이러한 갭을 메꿔주는 것이 델타타임입니다. 델타타임은 60프레임의 경우 1/60 같은 값으로 정해집니다.

 

 

(좌)델타타임 적용 vs (우)델타타임 미적용 이동 비교

 

제 컴퓨터는 60프레임으로 두 오브젝트의 Update 함수의 실행 횟수는 1초에 60번 동일합니다. 델타타임을 적용한 좌측은 매개변수로 준 벡터에 1/60(델타타임)이 곱해져 1초 동안 매개변수로 준 벡터 값만큼 이동합니다. 반면 우측은 델타타임이 없어 벡터값이 1초동안 60번이나 실행돼 순식간에 사라지는 모습을 보여줍니다.

 

 

사용예제

public class Move : MonoBehaviour
{
    Vector3 vec = new Vector3(0, 0, 1);

    void Update()
    {
        //1. Translate : 벡터에 deltatime 곱해주기
        transform.Translate(vec * Time.deltaTime);


        //2. Vector3 함수 : 시간에 deltatime 곱해주기
        transform.position = Vector3.MoveTowards(transform.position, vec, 0.1f * Time.deltaTime);
    
    }
}