Update
Update 함수는 어떤 함수도 실행되고 있지 않을 때 바로 실행된다.
따라서 함수의 처리속도에 따라 호출 빈도가 변동될 수 있고 이로 인해 초당 프레임(Frame Per Second)이
고정적이지 않거나 프레임 드랍이 일어날 수 있다.
이런 이유들로 인해 물리함수가 제대로 작동하지 않거나 물리 계산의 정확도가 떨어질 수 있다.
FixedUpdate
그러나 FixedUpdate 함수는 Update 함수와는 다른 방식으로 호출된다.
일정한 시간을 정해놓고 정해진 시간마다 호출된다.
프레임과는 별개의 움직임을 갖는 것이라고 생각하면 될 것 같다.
따라서 Update에서 한 프레임의 처리 속도를 의미하는 deltaTime이 FixedUpdate 에서 정해놓은 시간인 Fixed TimeStep 보다 짧다면,
즉 0.02초(Fixed TimeStep) 안에 Update가 여러 번 호출된다면 한 프레임 사이에 물리함수가 아예 호출되지 않을 수도 있고 반대의 상황에서는 물리함수가 여러 번 호출될 수도 있다.
그러나 이것은 물리 함수를 호출하는데에 있어서 아무런 문제가 되지 않는다.
Frame이 어떻게 되던 FixedUpdate는 고정적인 시간마다 호출되기 때문이다.
만약 물리함수가 Update와 동일한 주기로 호출된다고 가정한다면 FrameDrop이 발생하였을 때 Frame 간 간극이 벌어져
두 장의 Frame 사이에 일어난 충돌 등을 감지하지 못하면 캐릭터가 벽에 끼이거나 통과하게 되는 등의 버그가 발생할 수 있을 것이다.
이것을 물리함수를 FixedUpdate에서 호출함으로써 FrameDrop이 발생하였을 때 발생할 수 있는 물리 함수들의 오류 등을 방지할 수 있는 것이다.
애초에 유니티의 FlowChart에서 FixedUpdate가 Physics 범주에 포함되어 있기도 하다.
Fixed TimeStep
FixedUpdate가 호출되는 주기를 의미한다.
Edit - Project Settings - Time - Fixed Timesetp 메뉴에서 설정할 수 있다.
'유니티 > 유니티 엔진' 카테고리의 다른 글
[유니티] 프레임 고정 (0) | 2023.11.13 |
---|---|
[유니티] 코루틴 (Coroutine) (0) | 2023.11.13 |
[유니티] 프리팹 (Prefab, Instantiate) (0) | 2023.11.09 |
[유니티] 자연스러운 좌표이동 (Vector2.Lerp) (0) | 2023.11.08 |
[유니티] fillAmount (0) | 2023.10.22 |