피너클의 it공부방
유니티 Time.deltaTime 본문
Time.deltaTime : 마지막 프레임에서 현재 프레임까지의 간격
그렇다면 Time.deltaTime은 왜 사용되는 것일까?
컴퓨터마다 fps가 다르기 때문이다.
FPS란
Frams per Second : 초당 프레임이다.
FPS가 60이면 1초당 60개의 프레임을 보여주는 것이고
FPS가 10이면 1초당 10개의 프레임을 보여주는 것이다.
프레임이란
한장의 사진이라 생각하면 된다.
프레임이 다르면
위에는 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일것이다.
즉 fps가 60이라면 1초당 60개의 프레임을 보여준다는 것이니 Time.deltaTime (각 프레임 사이의 간격) 은 1 / 60이다.
그렇다면 fps가 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을 이용하여 모든 컴퓨터에서 일정하게 작동시킬수 있게되는 것이다.
'유니티 여러가지' 카테고리의 다른 글
유니티 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 |