델타타임은 사용자의 컴퓨터 성능에 따라 변하는 값입니다.
유니티 라이프 사이클 글에서 Update함수가 1초에 프레임 수 만큼 실행된다고 말했습니다.
그런데 이 프레임은 컴퓨터 성능에 의해 결정되므로, 컴퓨터 성능이 낮다면, 프레임 역시 낮고, 반대로 높다면 프레임 또한 높아집니다. 이렇게 되면 Update 함수의 호출 횟수가 달라지기 때문에, 멀티플레이를 할 때 심각한 문제가 생깁니다.
카트라이더를 한다고 가정해 봅시다. 앞으로 전진하는 코드가 Update 함수에 있다고 하면, 고성능 유저는 Update에 있는 주행코드가 1초에 120번 실행돼 같은 시간에 저성능 유저에 비해 훨씬 멀리 갈 것입니다. 이러한 갭을 메꿔주는 것이 델타타임입니다. 델타타임은 60프레임의 경우 1/60 같은 값으로 정해집니다.
(좌)델타타임 적용 vs (우)델타타임 미적용 이동 비교
제 컴퓨터는 60프레임으로 두 오브젝트의 Update 함수의 실행 횟수는 1초에 60번 동일합니다. 델타타임을 적용한 좌측은 매개변수로 준 벡터에 1/60(델타타임)이 곱해져 1초 동안 매개변수로 준 벡터 값만큼 이동합니다. 반면 우측은 델타타임이 없어 벡터값이 1초동안 60번이나 실행돼 순식간에 사라지는 모습을 보여줍니다.
사용예제
public class Move : MonoBehaviour
{
Vector3 vec = new Vector3(0, 0, 1);
void Update()
{
//1. Translate : 벡터에 deltatime 곱해주기
transform.Translate(vec * Time.deltaTime);
//2. Vector3 함수 : 시간에 deltatime 곱해주기
transform.position = Vector3.MoveTowards(transform.position, vec, 0.1f * Time.deltaTime);
}
}
'유니티 3D기본(Roll A Ball)' 카테고리의 다른 글
10. 힘을 이용하여 물체 움직여보기 (velocity, addForce) (0) | 2021.10.14 |
---|---|
9. 실체와 같은 물체 만들기 (5 컴포넌트) (0) | 2021.10.14 |
7. Vector3 이동함수를 이용한 오브젝트 이동 (0) | 2021.10.14 |
6. 키 입력과 오브젝트 이동 (0) | 2021.10.13 |
5. 오브젝트 생명 주기(Life cycle) (0) | 2021.10.12 |