안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 Time 클래스의 deltaTime 프로퍼티에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:09 Time.deltaTime

2:58 아웃트로

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 강좌에서는 Time 클래스의 delta Time 프로퍼티에 대해서 알아봅시다.

deltaTime

먼저 deltaTime에서 delta는 보통 값의 차이를 의미하는 단어입니다.

시간을 의미하는 Time과 조합해서 생각해보면 deltaTime은 차이가 나는 시간이라는 뜻으로 지난 프레임이 완료되는 데까지 걸린 시간 차이를 의미하며 단위는 초 단위입니다.

한마디로 한 프레임을 진행하는데 걸린 시간이라는 뜻이죠.

그래서 게임을 진행하다가 컴퓨터 사양이나 게임의 최적화 문제로 게임의 프레임이 떨어지는 프레임 드랍 현상이 일어나면 이 deltaTime 값은 한 프레임의 화면을 렌더링하는데 걸리는 시간만큼 커지게 됩니다.

보통 30프레임 기준의 게임에서는 한 프레임당 deltaTime이 0.033정도가 나와야하고 60프레임 기준의 게임에서는 한 프레임당 0.016 정도가 나와야 합니다.

유니티 에디터에서 스크립트를 하나 생성하고 Start 함수에서 Application.targetFrameRate를 30으로 지정한 다음 Update 함수에서 Time.deltaTime을 디버그로 출력시키도록 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아가서 아무 게임 오브젝트에나 방금 만든 컴포넌트를 붙이고 게임을 실행해보면 앞에서 말한대로 약 0.033초에 가까운 값이 매 프레임마다 갱신되는 것을 볼 수 있습니다.

그리고 다시 스크립트에서 targetFrameRate를 60으로 변경하고 에디터로 돌아가서 테스트해보면 0.016초에 가깝게 deltaTime 값이 나오는 것을 확인할 수 있습니다.

그럼 이 delta time은 어디에 사용될까요?

그 예시를 보여드리도록 하겠습니다.

먼저 Update 함수에서 W키를 누르면 오브젝트를 이동시키는 코드를 작성해보겠습니다.

이 때 이동 코드에서 캐릭터의 이동 방향과 속도만 이용해서 캐릭터를 이동시키면 문제가 발생하게됩니다.

이 비교 영상처럼 프레임이 10일 때와 60일 때 캐릭터가 다른 속도로 움직이게 되는 겁니다.

이 문제의 원인은 프레임이 10일 때는 1초에 캐릭터를 10번 움직이게 되고, 프레임이 60일 때는 1초에 캐릭터를 60번 움직이기 때문입니다.

좀 더 풀어서 설명해보자면 이 코드에서는 프레임이 10일 때는 1의 속도로 캐릭터를 1초동안 10번 움직이기 때문에 이동한 거리가 10이 되는 것이고, 프레임이 60일 때는 1의 속도로 캐릭터를 1초동안 60번 움직이기 때문에 이동한 거리가 60이 됩니다.

1초 동안 움직인 횟수가 달라서 움직인 거리 역시 달라지는 것이죠.

이것은 컴퓨터의 성능이 오브젝트의 속도에 영향을 미치게 되는 것으로 보통의 게임에서는 발생해서는 안되는 문제입니다.

이 문제를 해결하기 위한 방법이 바로 이 이동 값에 delta time을 곱해주는 겁니다.

이렇게 이동 벡터에 delta time을 곱해주고 나면, 게임이 몇 프레임으로 진행되는지에 전혀 상관없이 오브젝트는 동일한 속도로 움직이게 됩니다.

이런 식으로 이동이나 회전 등 움직임에 있어서 시간의 영향을 받는 기능을 만들 때는 값에 deltaTime을 곱해서 흘러간 프레임 시간만큼만 가중치를 줌으로써 프로세서 속도의 영향에서 자유로워 지게됩니다.

아웃트로

이번 영상에서는 유니티 Time 클래스의 deltaTime에 대해서 알아보았습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61541

 

[투네이션 후원] https://toon.at/donate/637735212761460238

반응형

+ Recent posts