Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

피너클의 it공부방

유니티 Time.deltaTime 본문

유니티 여러가지

유니티 Time.deltaTime

피너클 2024. 9. 3. 15:01
728x90
반응형

Time.deltaTime : 마지막 프레임에서 현재 프레임까지의 간격

그렇다면 Time.deltaTime은 왜 사용되는 것일까?

컴퓨터마다 fps가 다르기 때문이다.

 

FPS란

Frams per Second : 초당 프레임이다.

FPS가 60이면 1초당 60개의 프레임을 보여주는 것이고

FPS가 10이면 1초당 10개의 프레임을 보여주는 것이다.

 

프레임이란

한장의 사진이라 생각하면 된다.

프레임이 다르면

 

프레임 5

 

 

프레임 20

위에는 fps 5이고 아래는 fps 20이다. 확실히 차이나는것을 볼수있다.

 

이때 생기는 문제

각 컴퓨터마다 동일한 fps를 갖지 않으니 어떤 컴퓨터는 1초당 60프레임이고 다른 컴퓨터는 1초당 5프레임이라 하자

그런데 유니티에서 사용하는 update함수는 프레임마다 작동된다.

즉 update를 사용했을때 어떤 컴퓨터는 초당 60번 작동되고 다른 컴퓨터는 초당 5번 작동된다.

 

변수 a를 만들고 매 프레임마다 1을 더한다고 했을때

fps60인 컴퓨터는 1초뒤에 a = 60 * 1 = 60 일 것이고

fps5 인 컴퓨터는 1초뒤에 a = 5 * 1 = 5 일 것이다.

 

1초당 돈버는 게임을 만들었는데 fps차이를 염두하지 않고 코드를 짜면

어느 컴퓨터는 1초에 60원이 벌리고 어느 컴퓨터는 1초에 5원이 벌릴것이다. 굉장히 큰 문제다.

해결방법

Time.deltaTime이 마지막프레임에서 현재프레임까지의 간격이라고 설명했다.

간편하게  생각하기 위해 1초를 60으로 나눠 생각하자

1초당 60개의 프레임

이때 저 위의 네모사이의 간격은 1 / 60일것이다.

즉 fps가 60이라면 1초당 60개의 프레임을 보여준다는 것이니 Time.deltaTime (각 프레임 사이의 간격) 은 1 / 60이다.

그렇다면 fps가 5라면 어떨까

1초당 5프레임

각 프레임마다의 간격은 12 / 60이 된다. 즉 Time.deltaTime은 12 / 60 이다.

 

다시

변수 a를 만들고 매 프레임마다 1을 더한다고 했을때 이번에은 Time.deltaTime을 적용한다면

fps60인 컴퓨터는 1초뒤에 a = 60 * 1 * (1 / 60) = 1일 것이고

fps5 인 컴퓨터는 1초뒤에 a = 5 * 1 * (12 / 60) = 1일 것이다. 둘이 같아진다.

 

Time.deltaTime을 이용하여 모든 컴퓨터에서 일정하게 작동시킬수 있게되는 것이다.

728x90
반응형

'유니티 여러가지' 카테고리의 다른 글

유니티 Coroutines  (0) 2024.09.08
유니티 Header  (0) 2024.09.07
유니티 Vector3.Lerp  (0) 2024.09.04
유니티 Quaternion.Euler  (0) 2024.09.03
유니티 Input.GetAxisRaw  (0) 2024.09.02
Comments