안녕하세요 연꿈술사입니다.
오늘은 유니티에서 이동 등에서 자주 처리하는 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축 자리에 넣어보세요.
연꿈술사였습니다. 감사합니다.
'Unity 3D' 카테고리의 다른 글
Unity 3D 엔진 기초 (5) Transform (0) | 2023.08.07 |
---|---|
Unity 3D 엔진 기초 (4) 접근제한자, SerializeField (0) | 2023.08.06 |
Unity 3D 엔진 기초 (2) LifeCycle (0) | 2023.08.04 |
Unity C# 문법 (6) Vector (0) | 2023.08.03 |
Unity C# 문법 (5) 객체지향 언어 (0) | 2023.08.02 |
댓글