사전캠프/Unity

유니티의 라이프사이클

서보훈 2024. 8. 19. 17:45

빗물받는 르탄이 강의중, Application.targetFrameRate = 60; 을 사용합니다.

 

해당 파트가 어떻게 오브젝트의 속도를 조절했는지 정리해보도록 하겠습니다.

 


https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html

 

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

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

docs.unity3d.com

 

관련 유니티 공식 문서 입니다.

 

유니티에서 작성하는 스크립트는, 실행시 아래 이미지처럼 작동하게되니다.

 

 

이중 우리에게 필요한것만을 추려서 설명하도록 하겠습니다.

 

우리에게 주로 필요한것은 Awake, Start, FixedUpdate, Update, LateUpdate, OnDisable 정도 입니다.

 

일단 게임이 실행되고, 씬이 시작되면 Awake 가 작동하게 됩니다.

그 다음, 스크립트가 붙어있는 오브젝트가 활성화 되어있을경우, Start가 작동하게 됩니다.

 

여기까지는 반복 사이클중 딱 한번 작동합니다.

이후 FixedUpdate가 시작되는데, 여기서 주로 물리적인 움직임이 처리됩니다.

또다른 특징으로는 FixedUpdate는 사용자의 컴퓨터 성능이 어떻든, 단위시간동안 같은 횟수가 처리됩니다.

 

그 다음 Update가 처리됩니다.

이 Update에서 주로 이동을 구현하거나, 점수등을 구현하게 되는데, 이 부분은 사용자의 컴퓨터 성능에 따라 처리 횟수가 달라지게 됩니다.

 

LateUpdate는 Update가 종료될때 작동하여, 한 사이클의 가장 마지막에 작동시키고 싶은 코드를 이 부분에 작성하게 됩니다.

 

LateUpdate가 끝나고 일부 처리가 종료되면, 유니티는 다시 FixedUpdate, Update 처리를 시작합니다.

 

이 사이클은 스크립트가 비활성화 될때까지 반복되며, Update문에서 비활성화를 시도할경우 사이클은 OnDisable에 적힌 코드를 수행하고 사이클이 중지됩니다.

 

여기서 Update가 1초에 몇번 작동될것인지를 결정하는것이 Application.targetFrameRate 이며, Time.deltaTime 을 통해서 한 사이클이 돌아가는데 시간이 얼마나 걸리는지를 확인 할 수 있습니다.

 

이번 강의에서는 Application.targetFrameRate 를 사용하여 모든 사용자의 프레임을 60으로 제한하여 사용하였지만, 사용자의 프레임을 성능에 맞추어 자유롭게 하면서, 프레임에 무관하게 움직임을 표현할 경우 Time.deltaTime을 곱하거나 FixedUpdate에서 이동을 처리하여 구현할 수 있습니다.

 

private void Update()
{
	//Application.targetFrameRate를 사용하지 않고, 프레임에 무관하게 이동속도를 구현할때
	transform.position += Vector3.right * 0.5f * Time,deltaTime;
}