유니티

[유니티] Time.deltaTime이란?

구리멍구리 2023. 4. 27. 18:09
반응형

FPS의 의미

FPS(Frames Per Second)는 초당 프레임 수로 1초에 몇개의 프레임이 나타나는지를 의미한다.
ex) FPS가 60이라면 1초에 60개의 프레임이 나타난다는 의미이다.

 

Time.deltaTime이란?

Time.deltaTime는 시간 개념으로 각 프레임을 렌더링하는데 걸리는 시간을 계산하는 Unity 함수이다.
프레임이 바뀔때마다의 시간을 측정한 값이 Time.deltaTime으로 나타난다. (자료형은 float형이다) 

ex)
FPS가 100이라면 1초에 100번 프레임이 바뀌는 것이고 한 프레임이 바뀌는 시간은 100분의 1초인 0.01초를 의미한다.
이때 Time.deltaTime는 0.01초가 된다.

FPS가 50이라면 1초에 50번 프레임이 바뀌는 것이고 한 프레임이 바뀌는 시간은 50분의 1초인 0.02초를 의미한다.
이때 
Time.deltaTime는 0.02초가 된다.

즉 FPS가 높을수록 Time.deltaTime는 적어지고 FPS가 낮을 수록 Time.deltaTime은 높아지는 반비례 관계를 가진다.

 

Time.deltaTime가 왜 필요할까?

Time.deltaTime는 다양한 장치와 플랫폼에서 게임이 원활하고 일관되게 실행되도록 도와준다.

부드럽고 몰입감 있는 게임 환경을 만들기 위해서는 일관된 프레임 속도를 유지하는 것이 필수적이다.


유니티에서 C#스크립트를 만들면 아래와 같은 코드가 기본적으로 주어진다.

이때 void Update()메소드의 주석을 살펴보자
[ // Update is called once per frame ]
Update메소드는 프레임이 바뀔때마다 호출되므로 FPS의 영향을 받는다.
FPS가 100이라면 1초에 Update메소드는 100번 호출된다.

 



코드비교 ( Time.deltaTime X )

만약 아래와 같이 전역변수로 num를 0으로 초기화하고 Update마다 1을 더한다는 코드를 작성했다고 치자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{

    float num = 0;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        num=num+1f;
    }
}

Update는 FPS가 100일때는 1초에 100번 호출되서 num에는 100이라는 값이 주어지고
FPS가 50일때는 1초에 50번 호출되서 num에는 50이라는 값이 주어진다.
이 변수가 만약 총알의 속도라면 FPS가 높은 플랫폼에서 게임을 하는 사용자가 절대적으로 유리하다.

 


 

이때 Time.deltaTime를 사용해보자.

코드비교 ( Time.deltaTime O )

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{

    float num = 0;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        num=num+(1f* Time.deltaTime);
    }
}

 FPS가 100인 플랫폼에서 Update는 1초에 100번 호출되면서 Time.deltaTime를 곱한다
(FPS가 100일때 Time.deltaTime는 0.01초)
프레임이 바뀔때마다 num에는 0.01씩 더해지고 1초가지나면 num은 1의 값을 가지게 된다.

 FPS가 50인 플랫폼에서 Update는 1초에 50번 호출되면서 Time.deltaTime를 곱한다
(FPS가 50일때 Time.deltaTime는 0.02초)
프레임이 바뀔때마다 num에는 0.02씩 더해지고 1초가지나면 num은 똑같이 1의 값을 가지게 된다.


결론

즉, Time.deltaTime을 사용하면 다른 플랫폼과 장치여도 각 프레임에 맞게 업데이트를 해줌으로써 다양한 사용자들이 일관된 환경에서 게임을 플레이 할 수있게 도와준다.

반응형