Update()와 FixedUpdate()의 차이

  • Update : 매 프레임마다 호출되는 메서드. 게임 로직의 주요 업데이트가 이루어진다. 매 프레임 호출되는 만큼 불필요한 계산을 피하고 최적화하기 위해 사용하지 않으면 지워주는 것이 좋다.
  • FixedUpdate : 물리 엔진 업데이트 시 호출되는 메서드. 물리적인 시뮬레이션에 관련된 작업을 처리할 때 사용된다. Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출된다.

스크립트 라이프 사이클

 

Update는 불규칙한 호출임으로 물리엔진 충돌검사 등이 제대로 안될 수 있기 때문에 물리적인 시뮬레이션에 관련된 작업을 처리할 때는 FixedUpDate를 사용하는 것이 좋다.

 

리듬게임의 노트에 판정을 위한 Collider가 붙어있으므로 FixedUpDate를 사용한다.

private float noteSpeed;

private void FixedUpdate()
{
    Move();
}

private void Move()
{
    transform.position += Vector3.down * noteSpeed * Time.fixedDeltaTime;
}

 

 

노트의 정확한 판정을 위해 double을 사용하면 어떨까 해서 적용해보니 Vector3 및 double 형식의 피연산자에 적용할 수 없다고 뜬다.

float에 비해 double의 소수점 범위가 더 크기 때문에 발생하는 문제가 아닐까 예측했는데 double의 연산자 오버로딩이 없어서 그런 것이었다. 즉, 유니티에서 Vector3에 곱하는 방법을 명시하지 않은 것이다.

 

 

+ Recent posts