Fixed Timestep | 물리적 계산이나 FixedUpdate() events를 수행할 때 지시하는 프레임속도와 무관한(framerate-independent) 구간. |
Maximum Allowed Timestep | 프레임 속도가 느릴 때 최악의 경우에 제한하는 프레임속도와 무관한(framerate-independent) 구간. 물리적 계산이나 FixedUpdate() events는 이 값을 넘기지 않는 시간 내에서만 수행합니다. |
Time Scale | 시간이 흐르는 속도. 이 값을 수정하여 총알 시간 효과(bullet-time effects)를 재현 할 수 있습니다. 1은 실시간을 의미하고, 0.5는 그 반의 빠르기, 2는 두 배의 빠르기를 의미합니다. |
고정된 시간단계는 안정된 물리력 시뮬레이션이 매우 중요합니다. 모든 컴퓨터가 상이하게 설계되었으므로, 각각 다른 하드웨어 구성 하에 유니티 게임의 실행 성능도 매우 다양해 집니다. 그러므로 물리력은 게임의 프레임 속도와 독립적으로 계산되어야 합니다. 충돌 감지나 리지드바디 동작 같은 물리력 계산은 이산 고정 시간단계(discrete fixed time steps)로 수행되며 프레임 속도와는 무관합니다. 이렇게 함으로써 다양한 하드웨어 상에서 혹은 프레임 속도가 변경될 때 일관적인 시뮬레이션이 가능하게 됩니다. 예를 들어, 많은 게임을 스크린에 띄우거나 사용자가 배경에 다른 프로그램을 실행하면 프레임 속도가 저하 될 수 있습니다.
고정 시간단계는 다음과 같은 계산됩니다. 모든 프레임이 스크린에 그려지기 전에, 유니티가 고정시간을 고정델타시간으로 당기고 그것이 현재시간에 다다를 때까지 연산을 수행합니다. 이렇게 하면 Fixed Timestep이 정확하게 계산됩니다. 이 값이 적어질수록, 물리 연산은 더 자주 실행 됩니다. 초당 고정프레임의 숫자는 1을 Fixed Timestep로 나누면 계산 할 수 있습니다. 그러므로, 1 / 0.02 = 50 초당 고정 프레임이고, 1 / 0.05 = 20 초당 고정 프레임 입니다.
단순하게 이야기하면, 고정 업데이트 값이 작을수록 물리 시뮬레이션은 더 정확해지지만 CPU에는 부담이 가중됩니다.
고정 시간 스텝은 안정된 물리 시뮬레이션을 보장합니다. 하지만 이는 말이 게임이 대량의 물리연산을 요구하며 이미 느리게 동작하고 이따금 낮은 프레임 속도에 빠지고 있는 경우에는 성능저하를 가져올 수 있습니다. 프레임 처리시간이 길수록 다음 프레임에 더 많은 고정업데이트 스텝을 수행해야 할 것 입니다. 이것이 성능 저하를 초래합니다. 이러한 시나리오를 방지하기 위하여, 유니티 iOS는 최고허용시간스텝 (Maximum Allowed Timestep)을 도입하여 여기에 명시된 임계 값 이상으로 물리연산이 일어나지 않도록 제한하고 있습니다.
만일 프레임이 최고허용시간스텝 (Maximum Allowed Timestep)에 명시된 시간보다 더 긴 시간이 소요된다면, 물리력은 해당 프레임이 최고허용시간스텝 (Maximum Allowed Timestep)에서 명시된 시간만 소요된 것으로 " 가정 " 할 것 입니다. 다른 말로, 만일 프레임 속도가 하위 임계값보다 아래로 떨어진다면, 리지드바디는 살짝 느려지며 CPU가 따라오길 기다릴 것 입니다.
최고허용시간스텝 (Maximum Allowed Timestep)은 물리연산과 FixedUpdate()이벤트 모두에 영향을 미칩니다.
최고허용시간스텝 (Maximum Allowed Timestep)은 Fixed Timestep과 마찬가지로 초 단위로 표시됩니다. 그러므로 0.1로 설정하면 만일 프레임 속도가 1 / 0.1 = 10 초당 프레임 아래로 떨어지면 물리와 FixedUpdate() 모두를 느리게 할 것입니다.