Unity Learn/주니어 프로그래머

6단원 - 프로젝트 최적화 : FixedUpdate()

coding-potato 2024. 11. 26. 14:50

FixedUpdate() 함수

Unity에서 제공하는 MonoBehaviour의 메서드 중 하나로, 주로 물리 엔진(Physics)과 관련된 작업을 처리할 때 사용됩니다. Unity의 프레임 업데이트 주기와는 독립적으로 고정된 시간 간격으로 호출되므로, 물리적 연산이 일관되게 동작하도록 보장합니다.

 

FixedUpdate의 특징

움직임이나 물리를 구현할 때 유용합니다. FixedUpdate()는 Update()가 호출되기 전에 호출되며 게임 플레이 시 발생하는 물리를 계산하려고 할 때 작동합니다.

  1. 고정된 호출 주기:
    • FixedUpdate는 Unity의 물리 업데이트 주기에 따라 호출됩니다.
    • 기본 호출 간격은 Unity 설정에서 Time.fixedDeltaTime(기본값 0.02초)으로 정의됩니다.
    • 즉, 초당 50회(1/0.02) 호출됩니다.
  2. 물리 엔진과의 통합:
    • Rigidbody와 같은 물리 기반 컴포넌트의 움직임, 힘 적용, 충돌 감지를 처리하는 데 사용됩니다.
    • 물리적인 계산은 FixedUpdate에서 수행해야 정확성과 안정성을 유지할 수 있습니다.
  3. 프레임 속도와 독립적:
    • Update는 프레임 속도에 따라 호출 횟수가 달라지지만, FixedUpdate는 일정한 간격으로 호출됩니다.
    • 프레임 속도가 불안정한 환경에서도 물리 계산의 일관성을 유지합니다.

언제 FixedUpdate를 사용해야 하나요?

FixedUpdate는 다음과 같은 작업에 적합합니다:

  1. Rigidbody와 상호작용:
    • AddForce, AddTorque와 같은 물리 연산.
  2. 물리 기반 오브젝트 이동:
    • Rigidbody를 사용한 이동 로직(속도, 힘, 충격 등).
  3. 정확한 시간 기반 계산:
    • 물리 시뮬레이션의 일관성을 보장해야 할 때.

주의 사항

  1. transform을 사용하지 말 것:
    • FixedUpdate에서는 transform을 직접 수정하지 않는 것이 좋습니다. Rigidbody를 통해 움직임을 구현하세요.
    • 예: 
    • csharp
      코드 복사
      rb.MovePosition(targetPosition); // Rigidbody를 통해 이동
  2. 고정 시간 간격 조정:
    • Time.fixedDeltaTime 값을 조정하면 FixedUpdate 호출 주기를 변경할 수 있습니다.
    • 예:
      csharp
      코드 복사
      Time.fixedDeltaTime = 0.01f; // 초당 100회 호출
  3. 많은 로직을 처리하지 말 것:
    • FixedUpdate는 물리 연산에 초점이 맞춰져야 하며, 비물리적인 로직은 Update에서 처리하세요.