나는 이것을 주석으로 쓰려고했지만 결국 바람이 많이 걸리기 때문에 답으로 바꾸었다.
현재 답변은 대부분 정확하지만 언급 된 몇 가지 오해의 소지가 있습니다.
일반적으로 대부분의 게임 플레이 관련 작업은로 진행됩니다 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가 이미 초당 단위로되어 있으므로 필요하지 않습니다.