[Unity] Update, FixedUpdate, LateUpdate

민지홍·2024년 11월 8일

Unity

목록 보기
4/4
post-thumbnail

Unity를 활용한 게임 개발에서 성능 최적화와 자연스러운 게임 흐름을 구현하는 것은 매우 중요하다. 이를 위해 Unity는 Update, FixedUpdate, LateUpdate라는 세 가지 메서드를 제공하며, 각각 다른 주기에 따라 호출된다. 이 메서드들은 게임의 주요 기능인 입력 처리, 물리 연산, 후처리 등 다양한 작업을 효율적으로 처리하는 데 도움을 준다. Update, FixedUpdate, LateUpdate에 대해 알아보았다.

Update

  • 설명 : 매 프레임마다 호출되며, 주로 입력 처리와 프레임 기반 업데이트에 사용된다.
  • 사용 예시 : 캐릭터 이동 사용자 입력 처리 등.
void Update()
{
    // 델타 타임을 사용한 이동 (프레임 속도에 관계없이 일정한 속도로 움직임)
    float move = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
    transform.Translate(move, 0, 0);

    // 점프 입력 처리
    if (Input.GetButtonDown("Jump"))
    {
        Jump();
    }
}

FixedUpdate

  • 설명 : 일정한 시간 간격으로 호출되며, 주로 물리 연산 관련 작업을 처리한다.
  • 사용 예시 : 중력이나 충돌, 힘을 적용하는 물리 연산 등.
void FixedUpdate()
{
    // Rigidbody에 힘을 가하여 중력 적용
    if (isGrounded && Input.GetButton("Jump"))
    {
        rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
    }

    // 일정한 시간 간격으로 물리 연산을 처리하여 일관된 결과를 얻음
    rb.velocity = new Vector3(horizontalInput * speed, rb.velocity.y, 0);
}

LateUpdate

  • 설명 : Update가 완료된 후 호출되며, 주로 다른 개체가 이동한 이후에 처리해야 하는 작업에 사용된다.
  • 사용 예시 : 카메라가 캐릭터를 따라가도록 설정, 애니메이션 후처리 등.
void LateUpdate()
{
    // 캐릭터의 위치를 따라가도록 카메라 위치 업데이트
    Vector3 desiredPosition = target.position + offset;
    transform.position = Vector3.Lerp(transform.position, desiredPosition, followSpeed * Time.deltaTime);
}

관련 개념

프레임 레이트 (Frame Rate)와 델타 타임 (deltaTime)

  • 프레임 레이트는 초당 프레임 수를 나타내며, 프레임 속도가 달라지면 Update 호출 빈도도 달라진다.
  • 델타 타임(Time.deltaTime)은 프레임 간의 시간 차이를 나타내어, 다양한 프레임 속도에서 동일한 이동 속도를 유지할 수 있다.
// 프레임 속도에 관계없이 일정한 속도로 이동
transform.Translate(Vector3.forward * speed * Time.deltaTime);

물리 연산 (Physics Calculations)

  • 물리 연산은 FixedUpdate에서 처리하는 것이 권장되며, Rigidbody와 관련된 물리적 상호작용을 다룬다.
void FixedUpdate()
{
    // 물리 연산에서 Rigidbody에 힘 적용
    rb.AddForce(Vector3.up * force);
}

0개의 댓글