DeltaTime

AkaPoka·2025년 5월 26일

유니티

목록 보기
2/8

Update()

Update()는 매 프레임을 기준으로 작동한다.
30fps는 1초에 30번, 360fps는 1초에 360번 실행된다는 뜻이다.
deltaTime이 없다면 Update()에서 매 프레임 0.1f 씩 속도를 증가시킨다고 했을 때
30fps는 30번 실행되니 1초에 3f, 360fps는 360번 실행되니 1초에 36f씩 속도가 증가할 것이다.
프레임이 높을수록 게임도 빨라진다는 소리다. 이는 명백히 좋지않다.
이를 해결하기 위해서 Time.deltaTime을 곱해준다.

Time.deltaTime은 직전 프레임과 현재 프레임 사이에 흐른 시간을 계산한 값이다. 매 프레임마다 바뀐다.

30fps이면 deltaTime ≈ 1/30 = 0.033초
360fps이면 deltaTime ≈ 1/360 = 0.0028초

Time.deltaTime을 곱하는 이유는 프레임 수의 차이를 시간 기준으로 보정해주기 위해서이다.
즉, 프레임 단위가 아닌 "초" 단위로 움직이거나 계산하게 만드는 것.

FixedUpdate()

FixedUpdate()는 고정된 시간(기본 0.02초, 1초에 50번)마다 실행된다.
물리엔진에서 안정된 계산을 위해 고정된 시간을 사용해주기 위해 사용한다.

Time.fixedDeltaTime 이라는것도 존재하지만 이는 FixedUpdate()내부에서 자동적으로 적용된다.
fixedDeltaTime은 FixedUpdate()의 실행 빈도와 같다.
Time.fixedDeltaTime = 0.01f; 와 같이 fixedDeltaTime을 수정하면 FixedUpdate()도 1초에 100번 실행하게 된다.

DeltaTime

Time.deltaTime은 직전 프레임과 현재 프레임 사이에 흐른 시간을 계산한 값이다. 매 프레임마다 바뀐다.
라고 위에서 말했다.
그래서 DeltaTime은 항상 1프레임의 딜레이가 존재한다.

DeltaTime 관련 유튜브 영상 (영어)

0개의 댓글