Unity를 활용한 게임 개발에서 성능 최적화와 자연스러운 게임 흐름을 구현하는 것은 매우 중요하다. 이를 위해 Unity는 Update, FixedUpdate, LateUpdate라는 세 가지 메서드를 제공하며, 각각 다른 주기에 따라 호출된다. 이 메서드들은 게임의 주요 기능인 입력 처리, 물리 연산, 후처리 등 다양한 작업을 효율적으로 처리하는 데 도움을 준다. Update, FixedUpdate, LateUpdate에 대해 알아보았다.
void Update()
{
// 델타 타임을 사용한 이동 (프레임 속도에 관계없이 일정한 속도로 움직임)
float move = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
transform.Translate(move, 0, 0);
// 점프 입력 처리
if (Input.GetButtonDown("Jump"))
{
Jump();
}
}
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);
}
void LateUpdate()
{
// 캐릭터의 위치를 따라가도록 카메라 위치 업데이트
Vector3 desiredPosition = target.position + offset;
transform.position = Vector3.Lerp(transform.position, desiredPosition, followSpeed * Time.deltaTime);
}
// 프레임 속도에 관계없이 일정한 속도로 이동
transform.Translate(Vector3.forward * speed * Time.deltaTime);
void FixedUpdate()
{
// 물리 연산에서 Rigidbody에 힘 적용
rb.AddForce(Vector3.up * force);
}