Unity Engine

[Unity] CharacterController.Move 가 Update에서 동작하지 않는 현상

Aostols 2022. 12. 16. 21:22
반응형

서론

최근 이상한 일을 겪었습니다.

CharacterController.Move 가 Update에서 동작하지 않고 FixedUpdate에서만 동작하는 현상입니다.

Google에서 검색해도 비슷한 현상에 대한 내용은 몇건 찾을 수 있었으나 정확한 내용은 없었고 FixedUpdate로 옮겼다는 글만 몇개 보았습니다.

 

원인은 단순한 문제가 복잡하게 얽혀 있었습니다.

 

1. 너무나도 높은 프레임

2. CharacterController의 Min Move Distance 값.

 

 

Update

Update는 가능한 호출할 수 있는 만큼 자주 호출되는 녀석이고 FixedUpdate는 고정된 주기로 호출되는 녀석 입니다.

따로 수정하지 않는다면 FixedUpdate는 0.02초마다 호출됩니다.

Update는 부하가 심하지 않는다면 초당 몇천번씩 호출되기도 하지요.

 

문제점

문제는 세팅된 프로젝트가 초당 몇천 프레임이 나오는 상황이었고 CharacterControler.Move가 안되는 상황이었습니다.

확인을 해 본결과 Min Move Distance가 문제였습니다.

따로 세팅을 하지 않는다면 CharacterController 의 Min Move Distance는 0.001입니다.

우리는 Move를 몇천프레임 나오는 상황에서 Update에서 불렀고 당연하게도 Time.DeltaTime을 써서 호출하였습니다.

움직이는 값은 Min Move Distance이하로 떨어지게 되었고 CharacterController는 움직이지 않았습니다.

 

해결법

제시되었던 해결법은 3가지가 있었습니다.

1. FixedUpdate에서 호출한다.

2. Update를 느리게 호출한다.

3. Min Move Distance를 더 줄인다.

 

1번의 경우는 너무도 귀찮아지게 됩니다.

얽혀 있는 로직들이 많아서 선택하지 않았습니다.

3번의 경우 다른쪽에 부하를 주지 않을까 하는 생각이 들었습니다.

결론은 2번으로 Update에서 Move호출해 주는 주기를 0.02로 맞추게 되었습니다.

 

로직이 가장 적게 회손되고 귀찮아 지지도 않는 결론이었습니다.

다만 3번도 크게 문제가 없을거라 예상되긴 합니다.

반응형