메인 프레임 업데이트와 달리 Unity의 물리 시스템은 일정 시간 간격으로 업데이트되며, 이는 물리 시뮬레이션의 정확성과 일관성을 유지하는 데 중요합니다. 고정 업데이트 간격을 고정 시간 단계라고 합니다. 다음 두 가지 방법으로 고정 시간 단계를 읽거나 변경할 수 있습니다.
Time.fixedDeltaTime 프로퍼티 값을 설정합니다.두 경우 모두 고정 시간 단계가 초 단위로 지정됩니다. 예를 들어 값이 0.01이면 각 고정 시간 단계의 지속 시간이 100분의 1초이므로 초당 100번의 고정 업데이트가 이루어집니다.
고정 업데이트 루프는 일정 시간 간격으로 실행되는 코드를 시뮬레이션하지만, 실제로는 고정 업데이트 간격이 고정되어 있지 않습니다. 이는 고정 업데이트가 항상 프레임을 실행해야 하므로 프레임의 지속 시간과 고정 시간 단계의 길이가 완벽하게 동기화되지 않기 때문입니다. 현재 프레임 동안 고정 시간 단계가 완료되면 관련 고정 업데이트는 다음 프레임까지 실행할 수 없습니다. 프레임 속도가 낮으면 단일 프레임이 여러 고정 시간 단계에 걸쳐 있을 수 있습니다. 이 경우 현재 프레임 동안 고정 업데이트의 백로그가 누적되고 Unity는 이를 따라잡기 위해 다음 프레임에서 모든 업데이트를 실행합니다.
참고: Unity가 시뮬레이션을 따라잡으려고 하지 않는 최대 시간 단계 기간이 있습니다. 자세한 내용은 시간 관련 배리에이션 처리를 참조하십시오.
Unity는 고정 업데이트마다 자체 코드를 실행할 수 있는 엔트리 포인트로 MonoBehaviour.FixedUpdate 메서드를 제공합니다. 이것은 리지드바디에 힘을 가하기와 같이 물리 관련 코드를 실행하는 데 가장 일반적으로 사용됩니다.
고정 업데이트 사이클 중에 발생하는 일에 대한 자세한 내용은 실행 순서 다이어그램의 물리 섹션에서 확인할 수 있습니다.
애플리케이션이 초당 고정 시간 단계 수보다 높은 프레임 속도로 실행되는 경우 평균 프레임 지속 시간은 단일 고정 시간 단계의 지속 시간보다 적습니다. 이 경우 각 프레임에는 고정 업데이트가 하나 있거나 전혀 없습니다. 예를 들어 고정 시간 단계 값이 0.02인 경우 초당 50번의 고정 업데이트가 발생합니다. 애플리케이션이 초당 80프레임으로 실행되는 경우 아래와 같이 두 프레임 또는 세 프레임마다 고정 업데이트가 발생합니다.
이 다이어그램은 고정 업데이트 시간 단계 속도보다 빠르게 실행되는 프레임 속도를 보여 줍니다. 시간은 오른쪽으로 진행되고 각 프레임은 번호가 지정되어 있으며 프레임 시작 시 해당 Update 호출이 주황색으로 표시됩니다. 고정 시간 단계는 0.02초(초당 50회)이며, 게임이 초당 약 80프레임으로 더 빠르게 실행됩니다. 이 상황에서는 프레임이 시작될 때까지 전체 고정 업데이트 시간 단계가 완료되었는지 여부에 따라 일부 프레임에 고정 업데이트 호출이 하나 있고, 일부 프레임에는 없을 때가 있습니다. 고정 시간 단계 기간은 A, B, C, D, E로 표시되고 해당 고정 업데이트 호출이 발생하는 프레임은 녹색으로 표시됩니다. 시간 단계 A에 대한 고정 업데이트 호출은 프레임 4 시작 시, 시간 단계 B에 대한 고정 업데이트 호출은 프레임 7 시작 시 발생합니다.
애플리케이션이 고정 시간 단계 값보다 낮은 프레임 속도로 실행되는 경우 평균 프레임 시간이 단일 고정 시간 단계보다 길어집니다. 따라서 일부 프레임 동안 고정 업데이트의 백로그가 누적될 수 있으므로, 각 프레임에는 물리 시뮬레이션이 백로그를 따라잡을 수 있도록 하나 이상의 고정 업데이트가 발생합니다. 예를 들어 고정 시간 단계 값이 0.01이면 초당 100번의 고정 업데이트가 발생합니다. 애플리케이션이 초당 40프레임으로 실행되는 경우 Unity는 프레임당 평균 2–3개의 고정 업데이트를 수행하여 그대로 유지합니다. 프레임 속도가 빠른 것보다 물리를 더 정확하게 모델링하는 것이 더 중요할 때 이러한 시나리오가 필요할 수 있습니다.
이 다이어그램은 고정 업데이트 사이클이 프레임 속도보다 빠르게 실행될 때 발생하는 현상을 보여 줍니다. 고정 시간 단계는 0.01초(초당 100회)이며, 게임 프레임 속도는 느려지고 초당 약 40프레임입니다. 이 경우 대부분의 프레임은 각 업데이트 호출 전에 여러 개의 고정 업데이트 호출을 받습니다. 이 횟수는 이전 프레임 이후 경과된 전체 업데이트 시간 단계의 수에 따라 다릅니다. 고정 업데이트 시간 단계 기간은 A, B, C 등으로 표시되고 해당 고정 업데이트 호출이 발생하는 프레임은 녹색으로 표시됩니다. 시간 단계 A 및 B에 대한 고정 업데이트 호출은 프레임 2 시작 시, 프레임 C, D, E에 대한 고정 업데이트 호출은 프레임 3 시작 시 발생합니다.
참고: 시간 단계 값이 작으면 물리 업데이트가 더 자주 발생하며 시뮬레이션도 더 정확하다는 의미이며 이로 인해 CPU 부하가 더 커집니다.