본문 바로가기
Unity 3D

Unity 3D 엔진 기초 (3) deltaTime, 플레이어 이동 구현

by 연꿈술사 2023. 8. 5.

안녕하세요 연꿈술사입니다.

오늘은 유니티에서 이동 등에서 자주 처리하는 Time.deltaTime에 대해 알아보려고 합니다.

여기서 diltaTime의 delta는 변화된 것을 이야기합니다. 그럼 deltaTime은 무엇일까요?

쉽게 시간이 변한 값이라고 생각해주시면 될 것 같습니다.

 

우리가 deltaTime을 사용하는 이유는 두 개의 컴퓨터가 있다고 생각을 해보겠습니다. 여기서 

한 컴퓨터는 1초에 4번을 처리할 수 있고, 다른 컴퓨터는 1초에 2번 처리할 수 있는 컴퓨터라고

생각을 해보겠습니다. 만약 우리가 좋아하는 게임 카트라이더를 한다고 했을 때 1초에 누군가는 4m를

이동하고 누군가는 2m를 이동한다면 어떨까요? 아마 2m를 이동하는 사람은 컴퓨터의 성능이 좋지 않다는

것 때문에 매 번 패배를 겪어야 할 것입니다.

컴퓨터 성능에 따라 초당 프레임이 높은 사람이 승리하는 게임만 존재한다면 아무도 경쟁게임을 하려고 

하지 않겠죠. 하지만 이를 해결해주는 것이 바로 deltaTime 입니다.

 

1초 후에 두 시스템이 같은 위치에 도달할 수 있도록 해주는 것이죠. 아까 말씀드린 것처럼 한 컴퓨터는 한 번의

처리당 0.25초(초당 4회), 다른 컴퓨터는 0.5초(초당 2회) 였습니다. 이러한 구간 처리 시간을 deltaTime이라고 합니다.

deltaTime과 이동한 거리 1m를 구간마다 곱해보겠습니다. 0.25초 * 1m * 4회 = 1미터가 나옵니다.

0.5초 * 1m * 2회 = 1미터가 나오겠죠? 이렇게 처리를 해주게 되면 두 컴퓨터는 모두 1초당 1미터를 가게 될 것입니다. 

성능과는 관계없이 둘 다 1초에 1m를 가야 공정한 경쟁이 이루어지겠죠? 

즉, 시스템간의 동기화를 위해 사용하는 것입니다. 이런 deltaTime은 이동 뿐만 아니라 회전 및 크기 변환 애니메이션에도 사용됩니다. 

 

플레이어 이동 공식에 사용하는 간단한 예제와 함께 마치겠습니다.

public class Move : Monobehaviour
{
  float speed = 5f;
  void Update()
  {
      float h = Input.GetAxisRaw("Horizontal");
      float v = Input.GetAxisRaw("Vertical");
      Vector3 dir = new Vector3(h,v,0);

      transform.position += dir * speed * Time.deltaTime;
  }
}

이렇게 쓰고 2D 게임을 통해 이동해보세요. 3D 게임의 경우에는 v를 z축 자리에 넣어보세요.

연꿈술사였습니다. 감사합니다.

댓글