내가 일하며 알게 된 프로그래밍
article thumbnail

유니티에서는 특정한 순서대로 실행되는 함수들이 있다.

이러한 함수를 통해서 게임 오브젝트의 초기화, 업데이트, 렌더링 등의 작업이 이루어지는데 이를 통틀어 

함수 생명 주기 라고 한다

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com

 

유니티 엔진의 기초적인 부분이지만

그 중 Update, FixedUpdate, LateUpdate에 대해 설명을 해보려고 한다.

그림상으로 보았을 때 FixedUpdate -> Update -> LateUpdate 순으로 동작하는 것 같지만

Physics 부분에서 가장 중요시하게 봐야할 그림이 있다.

바로 Physics 단계는 한 번의 처리과정으로 끝나는게 아닌 반복해서 돌아가는 선이 핵심 부분이다.

Update와 LateUpdate는 고정되지 않은 매 프레임의 시간마다 호출되지만

그로인해 Update에서 물리 연산을 처리하려하면 터널링 현상이 발생할 수 있다.

왜?

매 프레임마다 물체의 이동속도만큼 움직이게 되면 일정하지 않은 프레임과 프레임간의 시간(elapsed time) 으로 인해 일정한 이동량을 가지지 못하기 때문이다.

그러면 FixedUpdate는 뭐가 다르길래 물리 연산을 FixedUpdate에서 처리하라고 하는걸까?

유니티 프로젝트 설정에서는 Fixed TimeStep 이라는 값이 있다.

이 값은 FixedUpdate의 함수 호출 주기를 담당하는 값이다.

Physics 단계에서 반복해서 도는 화살표는

전 프레임과 이번 프레임에서 걸린 시간 값에서 FixedUpdate를 1번만 실행하는게 아닌

Fixed TimeStep의 값으로 나눈 횟수만큼 반복하는 것을 뜻한다.

예를들어 

이번 프레임 처리 시간이 1초가 걸렸을 때

다음 프레임에서 FixedUpdate()의 호출 횟수는 1sec / 0.02 (Fixed Timestep) 으로 50번이 호출 된 후

Game Logic 단계로 넘어가게 된다.

하지만 위 예시에서 Maximum Allowed Timestep로 인해 Physics 처리가 루프를 돌며 처리 시간이 오래 걸릴 경우

Update() 단계로 넘어가지 못하는 상황을 막기위해 Physics 단계의 최대 시간 값이 설정된다.

위 사진처럼 Fixed TimeStep은 0.02, Maximum Allowed Timestep은 0.3333으로 설정되어 있을 경우

FixedUpdate는 1프레임당 최대 0.3333 / 0.02 = 16.665번까지 호출될 수 있다.

'프로그래밍 > Unity3D' 카테고리의 다른 글

Unity - On-demand Rendering  (0) 2024.05.13
Unity - 터널링 현상 (Tunnelling)  (0) 2023.12.22
Unity - SendMessage  (0) 2023.11.03
Unity - Sprite Atlas 왜 사용할까?  (0) 2023.10.30
Unity - 가비지 컬렉터 (Garbage Collector)  (1) 2023.10.24
profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames