이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
이전 파트에서 게임 오브젝트의 이동을 다루면서 Time.deltaTime에 대해서 언급한 적이 있습니다. Time.deltaTime이 무엇이고 왜 필요한지에 대해서 알아보도록 하겠습니다.
시간과 프레임
게임을 하다보면 우측 상단에 FPS라는 단어를 본적이 있을 것입니다. frames per second(초 당 프레임 수) 즉 1초에 몇 프레임을 찍어낼 수 있는가? 라는 의미죠.
히어로 밥 아저씨를 보면 눈 깜빡할 사이에 참 쉽죠? 하고 프로그램이 끝납니다. 우리가 그린다면 하루종일 걸릴 그림(프레임)을 순식간에 끝내는 것입니다. FPS는 이 예와 일맥상통합니다. 100FPS는 것은 1초에 100개의 그림(프레임)을 찍어내고, 1FPS는 1초에 1개의 그림을 찍어내는 것입니다. 만약 deltaTime(아래에서 배웁니다.) 이라는 것이 없다면 100FPS 유저가 100번 총을 발사할 동안 1FPS 유저는 총 한발만 발사하는 불상사가 일어날 수 있습니다. 이를 위해 우리는 성능에 따라 한 프레임에 나오는 결과 값을 보장함하여 두 유저가 같은 결과값을 얻도록 해야합니다. 이를 위해 Time.deltaTime을 사용해야 합니다.
Time.deltaTime
이전 장에서 만들었던 스크립트를 다시 보도록 하겠습니다.
이동 거리 보정을 위해서 Time.deltaTime을 썼다고 나와있습니다. 이제 이유를 알아보도록 하겠습니다.
유니티에서는 Time.deltaTim을 다음과 같이 설명하고 있습니다.
The time in seconds it took to complete the last frame
즉 전 프레임이 완료되기까지 걸린 시간을 말합니다. 컴퓨터의 성능이 느릴수록 값이 커지죠. 한 프레임이 완료되기까지 걸린 시간이 1초면 1, 10초면 10이 됩니다. 그렇다면 이 것을 어떻게 성능이 다른 유저의 결과값을 보장하는데 사용할까요? 아래의 그림을 보시겠습니다.
어떤 스크립트의 Update 문에서 총알을 발사하여 1프레임당 1m를 간다고 생각해봅시다. 초당 10프레임을 찍어내는 10FPS 유저는 총알이 3m 가는 동안 20FPS 유저는 초당 2배의 프레임을 찍어내므로 6m를 가겠죠. 이렇게 되면 20프레임 유저의 총알이 더 빠르므로 10프레임 유저는 걸레짝이 될 수 밖에 없습니다. 그렇다면 여기서 deltaTime은 어떻게 될까요? 1초에 10프레임을 찍으니 한 프레임당 1/10초 이것이 바로 deltaTime의 개념이 되는 것 입니다. 20프레임이면 1/20초 가 되는 것이죠. 이 값을 총알 이동거리에 곱해주면 10프레임 컴퓨터에서는 한 프레임당 1m 날라가던 총알은 0.1m, 20프레임 컴퓨터는 0.05m를 날라가므로 실제적으로 결과 값은 동일하게 나오는 것입니다. 비록 10프레임 컴퓨터는 20프레임 컴퓨터보다 한 프레임에 더 먼 거리를 날아가므로 뚝뚝 끊길 수는 있지만, 두 유저의 총알 속도는 같아진 것입니다.
'Frontend > Unity' 카테고리의 다른 글
[유니티 트랜스폼] 카메라 추적 (Follow Cam) (1) | 2016.08.04 |
---|---|
[유니티 트랜스폼] 회전 (Rotate) (0) | 2016.08.04 |
[유니티 기초] 유니티 생명주기 (Life Cycle) (0) | 2016.08.04 |
[유니티 트랜스폼] 이동 (Move) (5) | 2016.08.04 |
[유니티 실전 예제] 씬 전환 (10) | 2016.08.04 |
[유니티 C# 기초 강의] 12. 델리게이트 (5) | 2016.08.03 |