[Unity] Update, LateUpdate, FixedUpdate 차이

·2023년 9월 7일
0

Unity

목록 보기
4/5

Update

Update를 사용중인 모든 스크립트에서 프레임 당 한 번 호출됨
일정한 타임라인에 따라 호출되지 않음.
즉, 어떤 프레임의 처리 시간이 다음 프레임 시작까지의 시간보다 길면 Update 호출 사이의 시간이 달라짐.
게임 로직, 사용자 입력이나 물리 계산을 필요로 하지 않는 것들을 프로그래밍하는 데 적합함.

LateUpdate

Update와 마찬가지로 프레임 당 한 번 호출되지만 모든 Update function이 실행되고 나서 실행됨.
따라서 카메라 움직임을 smooth하게 하거나, 캐릭터를 움직이게 하는 등에 주로 사용됨.

FixedUpdate

Update와 달리, 일정한 타임라인에 따라 호출됨.
Raycasting이나 Rigidbody에 힘을 주는 것과 같은 Physics-based calculation 등 framerate independent 해야하는 계산에 적합함.
따라서 물리 오브젝트(RigidBody)에 영향을 미치는 요소는 FixedUpdate에서 실행해야 함.

  • 대략적으로 표현한 각 함수의 차이
    time-updates

테스트

public class UpdateTestScript : MonoBehaviour
{
    private int updatedFrames;
    private int fixedUpdatedFrames;
    private int lateUpdatedFrames;

    private void Start()
    {
        updatedFrames = 0;
        fixedUpdatedFrames = 0;
        lateUpdatedFrames = 0;
    }  
    private void Update() {
        Debug.Log($"Update | frame{updatedFrames}: {Time.time}");
        updatedFrames += 1;
    }

    private void LateUpdate() {
        Debug.Log($"LateUpdate | frame{lateUpdatedFrames}: {Time.time}");
        lateUpdatedFrames += 1;
    }

    private void FixedUpdate() {
        Debug.Log($"FixedUpdate | frame{fixedUpdatedFrames}: {Time.time}");
        fixedUpdatedFrames += 1;
    }
}

실행된 frame 수와 씬 플레이 후 지난 시간을 콘솔에 출력함.

결과

testupdates-0testupdates-0

Update와 LateUpdate는 쌍으로 실행됨 -> 따라서 실행된 frame 수가 같음.
FixedUpdate는 0.02s에 한 번 실행되는 반면에 Update와 LateUpdate는 실행 간격이 일정하지 않음.
그 결과, FixedUpdate가 여러 번 실행될 동안 Update&LateUpdate는 한 번 실행되기도,
Update&LateUpdate가 여러 번 실행될 동안 FixedUpdate는 한 번 실행되기도 함.

0개의 댓글