Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/유니티C#

유니티 C# Time.deltaTime

UniCoti(유니코티) 2022. 8. 28.

유니티를 공부해본 사람들이라면 Time.deltaTime에 대해

적어도 한번쯤은 들어봤을것이다.

그만큼 나도 초보시절에 많이 알아보고 공부했었는데,

 

하나하나 설명해주겠다.

일단 유니티의 Update문의 기능은 정확히 말하면

한 "프레임" 마다 한번씩 실행하는것이다.

 

게임에서 프레임이 안좋다. 이런 얘기를 들어본적이 있다면

이해가 쉬울것이다. 프레임은 곧 컴퓨터의 성능인데,

 

예를 들어 50년된 구형 컴퓨터는 1초에 10프레임이고,

요즘나온 최신 컴퓨터는 1초에 60프레임이라고 가정해보자.

그렇다면 유니티의 Update() 는 프레임마다 한번씩 실행하니

 

구형컴퓨터는 1초에 10번이 실행되고

최신 컴퓨터는 1초에 60번이 실행된다.

 

만약 Update문 안에 1의 거리만큼 이동하는 스크립트가 있다면?

구형 컴퓨터에서 돌린 게임은 10번 실행되니 10의 거리만큼 이동하게되고

최신 컴퓨터는 60번 실행되니 60의 거리만큼 이동하게 된다.

즉, 성능에 따라 게임의 점수, 캐릭터의 능력이 다르게 되는것이다.

 

이런현상을 막기위해 있는것이 Time.deltaTime이다.

최저의 프레임수 만큼의 비율로 60번을 실행하게 해주어

결국 Time.deltaTime을 사용하는 컴퓨터 끼리는

다른 프레임이더라도 게임에선 같은 속도를 내게 해준다.

 

이게  Time.deltaTime의 정의, 의미이고,

어떨때 사용해야 하냐면,

그냥 Update에 있는 움직이는 스크립트에는

다 사용하는게 맞다.

 

여기서 Time.fixedDeltaTIme이라는 것이 있는데,

이것과의 차이는

 

transform.position += 이동거리;

이런식으로 transform을 이용한 움직이는 코드를 짰다면

Time.deltaTime을 이용하고,

 

Rigidbody.Addforce(이동거리, forcemode.Impulse);

처럼 rigid(물리)를 이용하여 움직이는 코드를 짯으면

Time.fixedDeltaTime을 사용하면 오류가 없을것이다.

 

만약 반대로 사용했다면

무작위의 거리로 점프하거나 하는 상황이 나올것이다..

어떨땐 짧게 뛰고 어떨땐 높이뛰는

그런 현상이 나오니 주의하자.

 

도움이 되었길 바라며,

 

끝.

댓글

💲 추천 글