나는 이것을 주석으로 쓰려고했지만 결국 바람이 많이 걸리기 때문에 답으로 바꾸었다.
현재 답변은 대부분 정확하지만 언급 된 몇 가지 오해의 소지가 있습니다.
일반적으로 대부분의 게임 플레이 관련 작업은로 진행됩니다 Update
.
예를 들어 FixedUpdate
성능 때문에가 아니라 호출이 제대로 작동하지 않기 때문에 입력을 폴링하고 싶지 않습니다. AI는 같은 보트에 빠진다.
지속적으로 업데이트되는 물리는 사용해야 하는 유일한 게임 플레이 관련 작업입니다 FixedUpdate
. 비 연속적Physics.Raycast
이거나 한 번에 한 번만 전화를 걸 거나 Rigidbody.AddForce
에 속해 있습니다 Update
. 내가 언급 Rigidbody.AddForce
한 것은 문서가 암시하는 것과 상반되는 것처럼 보이지만 핵심은 연속 대 비 연속입니다.
연속 물리학 만이 속하는 하나의 큰 이유 FixedUpdate
는의 본질입니다 FixedUpdate
. 다른 답변에서는 고정 interval, but that's slightly misleading. In reality, a script is passed a time in Time.deltaTime
/ Time.fixedDeltaTime
* 에서 FixedUpdate가 호출되는 방법에 대해 언급했습니다. 이는 호출 사이의 실제 시간과 직접적으로 일치하지 않고 호출 사이의 시뮬레이션 시간입니다.
(* Time.deltaTime
및 Time.fixedDeltaTime
호출 같은 값은 FixedUpdate
[유니티 말할 수있는 경우에 현재 통화 Time.deltaTime
중에 유래 FixedUpdate
및 반품 Time.fixedDeltaTime
])
당연히 동일한 Update
성능을 다양한 성능 때문에 일정한 방식으로 호출 할 수 없습니다 FixedUpdate
. 중요한 차이점은 각 프레임 FixedUpdate
이 호출 사이의 올바른 간격으로 평균을 내릴 정도로 자주 호출되지 않은 경우 여러 번 호출되거나 평균이 너무 높지 않다는 것입니다. 다음은 실행 순서 문서에서 프레임 단위로 FixedUpdate를 여러 번 호출 할 수 있다는 내용입니다.
... FixedUpdate : FixedUpdate는 종종 Update보다 더 자주 호출됩니다. 프레임 속도가 낮 으면 프레임 당 여러 번 호출 할 수 있으며 프레임 속도가 높으면 프레임간에 전혀 호출되지 않을 수 있습니다 ...
이것은 나머지 실행 순서와 엔진의 특성으로 인해 물리학에는 영향을 미치지 않지만 입력 한 다른 항목에 FixedUpdate
영향을 미치므로 문제가 발생할 수 있습니다.
예를 들어 AI 처리를 내부에 배치 FixedUpdate
하면 AI가 여러 프레임의 업데이트를 한 줄로 건너 뛰지 않는다고 가정 할 이유가 없습니다. 또한`FixedUpdate가 뒤 떨어질 때마다 물리 및 플레이어 입력 / 이동과 같은 것들이 처리되기 전에 AI가 단일 프레임에서 여러 번 업데이트됩니다. 버그와 불규칙한 행동을 추적합니다.
당신은 유니티 등을 제공하는 고정 간격을 사용하는 다른 방법에 무언가를해야하는 경우 Coroutines
와 InvokeRepeating
.
그리고 Time.deltaTime
언제 그리고 언제 사용할 것인지에 대한 작은 메모 :
Time.deltaTime의 효과를 설명하는 가장 쉬운 방법은 단위 프레임 당 단위 숫자를 변경하다 초당 . 예를 들어 transform.Translate(Vector3.up * 5)
Update 와 같은 스크립트가있는 경우 기본적으로 프레임 당 5 미터의 속도로 변환을 이동합니다 . 즉, 프레임 속도가 낮 으면 움직임이 느리고 프레임 속도가 높으면 움직임이 빠릅니다.
동일한 코드를 가져 와서 변경 transform.Translate(Vector3.up * 5 * Time.deltaTime)
하면 객체는 초당 5 미터의 속도로 이동 합니다. 즉, 프레임 속도에 관계없이 객체는 1 초마다 5 미터 씩 움직입니다 (그러나 프레임 속도가 느리면 X 초마다 같은 양으로 움직이기 때문에 객체의 움직임이 더 빨라집니다)
일반적으로 초당 움직임을 원합니다. 이렇게하면 컴퓨터 속도에 관계없이 물리 / 운동이 같은 방식으로 작동하며 느린 장치에서 이상한 버그가 발생하지 않습니다.
그리고 그것을 사용할 때 아무런 의미가 없습니다 FixedUpdate
. 위에서 언급 한 것 때문에 각 호출마다 동일한 값 (Fixed Update Timestep 값)을 얻을 수 있으며 값에 아무런 영향을 미치지 않습니다. 에 정의 된 이동 / 물리 FixedUpdate
가 이미 초당 단위로되어 있으므로 필요하지 않습니다.