본문 바로가기
게임 개발/유니티

유니티 이벤트 함수 실행 순서

by FlowTree 2020. 2. 19.
반응형

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

 

유니티 - 매뉴얼: 이벤트 함수의 실행 순서

자동 메모리 관리를 이해하기 이벤트 함수의 실행 순서 Unity 스크립팅시, 미리 정의된 순서대로 실행되는 많은 이벤트 함수가 있습니다. 아래에서는, 실행 순서를 설명합니다. 에디터 __ Reset : __ Reset은 개체가 처음 연결되었을 때 스크립트의 프로퍼티로 초기화하는 데 호출됩니다. Reset 명령을 실행했을 때도 마찬가지입니다. 첫 번째 씬 로드 이 함수는 씬이 시작되면 호출됩니다(씬의 각 오브젝트에 대해 한 번). __ Awake : __이

docs.unity3d.com

블로그에서 볼라고 작성함. 색칠한 건 내가 유니티 책에서 본 것

 

▲ 유니티의 이벤트 함수 실행 순서

유니티 공식 설명인데, 위의 실행 순서 이미지하고 아래의 설명이 좀 다르고, OnTrigger, OnCollision 설명이 없다.

이 둘은 다음 글에 작성해야겠다.

0.이벤트 함수의 실행 순서

Unity 스크립팅시, 미리 정의된 순서대로 실행되는 많은 이벤트 함수가 있습니다. 아래에서는, 실행 순서를 설명합니다.

1.에디터

Reset : Reset은 개체가 처음 연결되었을 때 스크립트의 프로퍼티로 초기화하는 데 호출됩니다. Reset 명령을 실행했을 때도 동일함

2.첫 번째 씬 로드

이 함수는 씬이 시작되면 호출됩니다.(씬의 각 오브젝트에 대해 한 번)

 

Awake : 이 함수는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출됩니다. (만약 게임 오브젝트가 시작할 때 무효인 경우, 활성화되거나 연결된 하나의 스크립트 함수가 호출될 때까지, Awake는 호출되지 않습니다.)

 

OnEnable : (오브젝트가 활성화된 경우에만 호출됩니다): 이 함수는 오브젝트를 활성화 한 직후에 호출됩니다. 이것은 MonoBehaviour 인스턴스가 생성될 때, 예를 들어 레벨 로드 또는 스크립트 컴포넌트에 연결된 게임 오브젝트가 인스턴스화 될 때 발생합니다.

 

OnLevelWasLoaded : This function is executed to inform the game that a new level has been loaded.

씬에 추가 된 오브젝트에서 모든 스크립트는 Start, Update 등기 기타 함수가 호출되기 전에 Awake와 OnEnable 함수가 호출되는 것에 주의하십시오. 당연히 오브젝트가 게임 플레이 중에 인스턴스화 되었을 때 강제로 호출할 수 없습니다.

3.첫 번째 프레임의 업데이트 전

Start : 스크립트의 인스턴스가 활성화되면 첫 번째 프레임의 업데이트 전에 Start가 호출됩니다.

씬에 추가된 오브젝트의 Start 함수는 모든 스크립트 Update 및 기타 함수가 호출되기 전에 호출됩니다. 당연히 오브젝트가 게임 플레이 중에 인스턴스화되었을 때 강제로 호출 할 수 없습니다.

4.프레임 사이

OnApplicationPause : 일반 프레임 업데이트 사이에서 pause가 탐지된 프레임의 끝에서 호출 됩니다. OnApplicationPause가 호출되면 추가 프레임이 발행되어, pause 상태를 나타내는 그래픽 인디케이터가 표시 됩니다.

5.업데이트 순서

게임 로직 인터랙션, 애니메이션, 카메라 위치 등을 추적하는 경우, 각종 이벤트를 사용할 수 있습니다. 일반적인 패턴은 Update() 함수 내에서 대부분의 작업을 수행하는 것입니다만, 다른 함수도 사용할 수 있습니다.

 

FixedUpdate : FixedUpdate() Update()보다 자주 호출되는 경우가 많습니다. 프레임 속도가 낮은 경우에는 프레임마다 여러 번 호출 할 수 있지만, 프레임 속도가 높을 경우 프레임간에 호출 할 수 없습니다. FixedUpdate() 직후에 모든 물리적 특성 계산 및 업데이트가 발생합니다. FixedUpdate()에서 이동 계산을 적용 할 때 Time.deltaTime 값을 곱할 필요는 없습니다. 이것은 프레임 속도와는 독립적으로 FixedUpdate()가 신뢰할 수있는 타이머에서 호출되기 때문 입니다.

 

Update : Update는 프레임마다 한 번씩 호출됩니다. 이것은 프레임의 업데이트에 대한 주요 기능입니다.

 

LateUpdate : LateUpdate() Update() 후 프레임마다 한 번씩 호출됩니다. Update()에서 수행되는 계산이 완료되면 LateUpdate() 함수가 시작 합니다. LateUpdate()의 일반적인 사용은 다음의 3인칭 카메라입니다. Update()에서 캐릭터를 이동하고 회전시킬 경우 LateUpdate()에서 카메라의 이동과 회전 계산을 수행할 수 있습니다. 이렇게하면 캐릭터가 카메라가 그 위치를 추적하기 전에 완전히 이동합니다.

6.렌더링

OnPreCull : 카메라가 씬을 추려내기 전에 호출됩니다. 컬링(Culling)하여 카메라에 어떤 오브젝트를 표시할 지가 결정됩니다. OnPreCull은 컬링이 발생하기 직전에 호출됩니다.

 

OnBecameVisible / OnBecameInvisible : 오브젝트가 카메라에 표시되거나 표시되지 않게 될 때 호출됩니다.

 

OnWillRenderObject : 오브젝트가 표시되면 각 카메라에 한 번 호출됩니다.

 

OnPreRender : 카메라가 씬의 렌더링을 시작하기 전에 호출됩니다.

 

OnRenderObject : 모든 씬 렌더링 종료 후에 호출됩니다. GL 클래스 또는 Graphics.DrawMeshNow을 사용하여 이 시점에 사용자 지정 지오메트리를 그릴 수 있습니다.

 

OnPostRender : 카메라가 씬의 렌더링을 종료한 후 호출됩니다.

 

OnRenderImage : 화면 렌더링이 완료되고, 화면 이미지 처리가 가능하게 된 후에 호출됩니다.

 

OnGUI : GUI 이벤트에 따라 프레임마다 여러 차례 호출됩니다. 레이아웃 및 리페인트 이벤트가 먼저 처리된 후 레이아웃 및 키보드 / 마우스 이벤트가 각 입력 이벤트에 대해 처리됩니다.

 

OnDrawGizmos : 시각화를 위한 씬 뷰에서 기즈모(Gizmos)를 그리는 데 사용됩니다.

7.코루틴

일반적인 코루틴 업데이트는 Update 함수가 반환된 후 수행됩니다. 코루틴은 YieldInstruction이 종료할 때까지 그 실행(생성)을 중지할 수 있는 함수입니다. 코루틴의 다른 사용법은 아래와 같습니다.

 

yield : 코루틴은 다음 프레임에서 모든 Update 함수가 호출된 후에 속행합니다.

 

yield WaitForSeconds : 프레임에 대한 모든 Update 함수가 호출된 후 지정된 시간 지연 후에 속행합니다.

 

yield WaitForFixedUpdate : 모든 스크립트에서 모든 FixedUpdate 호출 후 속행합니다.

 

yield WWW :  WWW 다운로드 완료 후 속행합니다.

 

yield StartCoroutine : 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료될 때까지 기다립니다.

8.종료 시

이 함수는 씬 안에 있는 모든 활성 오브젝트에서 호출됩니다.

 

OnApplicationQuit : 이 함수는 응용 프로그램 종료 전에 모든 게임 오브젝트에서 호출됩니다. 에디터에서는 사용자가 재생 모드를 중지하면 호출됩니다. 웹 플레이어에서는 웹 뷰가 닫힐 때 호출됩니다.

 

OnDisable : 이 함수는 동작이 비활성화 될 때 호출됩니다.

9.오브젝트를 파기할 때

OnDestroy : 오브젝트 생존기간의 마지막 프레임의 프레임 업데이트 후 OnDestroy가 호출됩니다. (오브젝트는 Object.Destroy 또는 씬 종료시에 파기됩니다)

반응형

댓글