본문 바로가기

게임/Unity

Unity 델타 타임

728x90

Time.deltaTime - float Time.deltaTime{get;} 실수형 자료를 리턴해주는 프로퍼티이다.

필요성

컴퓨터의 성능에 따라 업데이트 속도가 달라질 수 있는데 이 때 Update에서 변경해주는 값들이 컴퓨터의 성능에따라 같은 현실 시간임에도 다르게 변경될 수 있다. 따라서 이를 맞추어줄 장치가 deltaTime이다.

원리

컴퓨터에서 현실의 시간을 알아올 수 있다고 생각해보자 예를 들어 컴퓨터가 100이라는 숫자를 세면 1초가 지난다 가정해보자. A,B 컴퓨터가 있고 A는 1초에 1번 B는 2번 실행한다고 가정하자.

시간
A
B
A가 인식한 실제 지나간 시간
B가 인식한 실제 지나간 시간
0.5
 
50
 
50/100 = 0.5
1
100
100
100/100 =1
100/100 =1
1.5
100
150
100/100=1
150/100 =1.5
2
200
200
200/100 =2
200/100 =2

A의 경우 1초에 1번 실행되므로 1초 경과시에 한번만 시간을 확인한다. B의 경우 1초에 2번 실행되므로 0.5에 한번 시간을 확인한다. 결국 빠른 B 컴퓨터가 더 찰나의 시간을 인식할 수 있지만 각 컴퓨터의 지나간 시간은 일치하게 된다.

기능

2인용 게임에 참여하는 각 컴퓨터의 성능이 다를 때 각 델타타임을 사용하지 않고 임의로 업데이트를 할 시 컴퓨터의 성능에 따라 업데이트 되는 정도가 달라서 빠른 컴퓨터가 유리해지는 상황이 발생하거나 같은 공간에서 물리적인 처리가 불가능해 질 수 있다. 이 때 델타 타임을 사용한다. 위 표에서 누적한 시간을 빼서 다시 계산한 후 50의 스피드로 움직이는 상황을 가정하자.

시간
A의 업데이트
B의 업데이트
A의 이동거리
B의 이동거리
0.5
 
(50-0)/100 = 0.5
0
25
1
(100-0)/100 =1
(100-50)/100 = 0.5
50
50
1.5
(100-100)/100=0
(150-100)/100 =0.5
50
75
2
(200-100)/100 =1
(200-150)/100 =0.5
100
100

B의 캐릭터가 더 깔끔하게 이동하는 것처럼 보이겠지만 결과적으로 두 컴퓨터에서 같은시간에 같은 거리를 이동하는 것을 맞출 수 있게 된다.

또한 이를 통해서 게임에서 캐릭터가 1초에 1의 위치를 움직이게 만드는 단위로도 활용가능하다.

728x90

'게임 > Unity' 카테고리의 다른 글

Unity 시점함수  (0) 2023.03.29