소소한 나의 하루들

이동거리를 공평하게, 델타타임 본문

개발/유니티

이동거리를 공평하게, 델타타임

소소한 나의 하루 2024. 1. 18. 17:46

출처: https://youtube.com/playlist?list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2&feature=shared

 

📚 유니티 기초 강좌

유니티 게임 개발을 배우고 싶은 분들을 위한 기초 강좌

www.youtube.com

키 또는 버튼을 이용하여 이동할 때, 이동거리를 공평하게 하는 방법이 있다.

Time.deltaTime을 사용하는 것이다.

Time.deltaTime을 사용하는 방법

  1. Translate : 벡터에 곱하기 transform.Translate(Vec * Time.deltaTime);
  2. Vector 함수 : 시간 매개 변수에 곱하기 Vector3.Lerp(Vec1, Vec2, T * Time.deltaTime);

델타 타임(Time.deltaTime)은 1프레임에 사용된 시간(이전 프레임의 완료까지 걸린 시간)이다.

안좋은 컴퓨터는 성능이 10프레임이고, 좋은 컴퓨터는 성능이 60프레임이다. (n프레임: 1초에 n번 업데이트)

그러면 컴퓨터 성능에 따라서 실행 주기(속도)도 달라질 것이다. 만약 카트라이더같은 온라인 게임을 한다고 한다면, 같은 게임인데 누구는 1초에 10번 돌고 누구는 1초에 60번 돈다. 컴퓨터  성능에 따라 1초에 누구는 10m, 누구는 60m를 가면 안될 것이다. 같은 종류, 성능의 카트면 컴퓨터 성능이 달라도 같이 가야할 것이다. 그래서 붙이는 것이 델타 타임이다.

10 프레임 컴퓨터 vs 60프레임 컴퓨터 프레임이 적을수록 프레임 하나가 소비하는 시간이 크다. = 델타 타임이 크다. 10 프레임 = 델타 타임이 크다 60 프레임 = 델타 타임이 작다

deltaTime 값은 프레임이 적으면 크고, 프레임이 많으면 작다.

따라서 델타 타임을 곱하게되면 프레임 수가 크든 작든 간에 나오는 값은 동일해진다.

 

Vector3 vec = new Vector3

( Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"), 0) * Time.deltaTime;

위 코드에서는 벡터의 x좌표, y좌표에 각각 곱해주었지만, z값이 0이므로 벡터 자체에 곱해주어도 좋다.

(벡터 * 숫자 = 벡터의 모든 좌표에 숫자를 곱한 것과 마찬가지)

Comments