본문 바로가기

유니티/유니티 엔진

[유니티] FixedUpdate

728x90
반응형

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 메뉴에서 설정할 수 있다.

 

 

 

 

 

 

 

 

 

728x90
반응형