유니티에서 게임 오브젝트의 동작을 정의할 때, Update, LateUpdate, FixedUpdate 메서드를 자주 사용하게 된다. 이들 메서드는 각각 다른 용도로 사용되는데, 어떤 차이점이 있는지 알아보자.
결론부터
Update, LateUpdate, FixedUpdate 메서드는 각각 특정 상황에 맞는 용도로 사용된다. 게임 로직과 사용자 입력 처리는 Update에서, 다른 오브젝트 상태에 종속적인 작업은 LateUdpate에서, 물리 연산은 FixedUpdate에서 처리하는 것이 일반적이다.
Update 메서드
Update 메서드는 매 프레임마다 한 번 호출된다. 보통 사용자 입력 처리, 애니메이션 업데이트, 게임 로직 등을 처리할 때 사용한다. 즉 지속적으로 상태를 업데이트해야 하는 모든 게임 로직을 처리할 때, 키보드나 마우스의 입력을 매 프레임마다 확인하고 반응해야 할 때 사용한다.
예시
void Update()
{
// 사용자 입력을 받아 오브젝트 이동
float move = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * move * Time.deltaTime);
}
LateUpdate 메서드
LateUpdate 메서드는 모든 Update 메서드가 호출된 후 매 프레임마다 한 번 호출된다. 주로 다른 오브젝트의 Update 로직이 완료된 후 처리해야 하는 작업에 사용된다. 일반적으로 플레이어 캐릭터의 움직임이 완료된 후 카메라를 위치시키는 카메라 추적의 경우와, 다른 오브젝트의 상태에 따라 움직여야 하는 종속적인 움직임을 구현해야 할 때 사용한다.
예시
public Transform player;
private Vector3 offset;
void Start()
{
// 카메라와 플레이어 간 초기 거리 설정
offset = transform.position - player.position;
}
void LateUpdate()
{
// 플레이어의 움직임이 완료된 후 카메라 위치 조정
transform.position = player.position + offset;
}
FixedUpdate 메서드
FixedUpdate 메서드는 고정된 시간 간격마다 호출된다. 이는 물리 엔진 업데이트와 동기화되어 있으며, 물리 계산을 처리하는 데 사용된다. 즉 Rigidbody를 사용한 물리 기반 움직임이나 충돌을 처리할 때 사용하고, 시간 간격이 일정해야 하는 정확한 시간 간격이 필요한 작업들에 사용한다.
예시
public Rigidbody rb;
public float speed;
void FixedUpdate()
{
// 물리 기반 움직임 처리
float move = Input.GetAxis("Horizontal");
rb.MovePosition(rb.position + Vector3.right * move * speed * Time.fixedDeltaTime);
}
차이점 정리
호출 빈도 및 시점
- Update: 매 프레임 호출.
- LateUpdate: 매 프레임 호출되지만 Update 후에 호출.
- FixedUpdate: 고정된 시간 간격으로 호출.
사용 용도
- Update: 일반적인 게임 로직 및 사용자 입력 처리.
- LateUpdate: 다른 오브젝트의 업데이트가 완료된 후 처리.
- FixedUpdate: 물리 연산 및 일정한 시간 간격이 필요한 작업.
시간 간격
- Update & LateUpdate: 프레임 속도에 따라 변동 (deltaTime을 잘 활용해야 함).
- FixedUpdate: 고정된 시간 간격. (유니티 설정에서 시간 텀 변경 가능)
'유니티 C# > 유니티 프로그래밍' 카테고리의 다른 글
[유니티] Monobehaviour, 그리고 유니티의 기본 원리 (0) | 2024.06.09 |
---|---|
[C# Basics] Static과 싱글턴 패턴 - Unity 예시를 통해 알아보자 (0) | 2024.04.10 |