본문 바로가기

개발/TIP

[C#] 유니티 이벤트 함수 실행 순서

유니티를 사용하여 게임을 개발할 때 이벤트 함수의 실행 순서는 굉장히 중요해요.

기본적으로 코딩는 위에서 아래로 순차적으로 실행되는 것처럼, 유니티 내부에서 이벤트 함수를 순차적으로 자동 실행되는데요.

이 순서를 알고 있어야 개발할 때 동작 순서가 꼬이는 것을 방지할 수 있어요.


게임 오브젝트에 스크립트를 적용하면, 스크립트에 작성한 이벤트를 유니티 내부에서 시간 혹은 프레임에 따라 모든 이벤트를 호출하게 되요.

그럼 유니티 이벤트 함수 중 중요한 함수 몇가지와 순서를 설명드릴게요.


1. Awake

Awake는 스크립트를 깨우는(?) 함수로 게임 실행 시 최초 1회만 호출되는 함수입니다.

이 함수는 게임 오브젝트가 활성화인 상태에서는 무조건 실행됩니다.

Start 함수와는 다르게 스크립트를 비활성화 상태 (enable = false)에서도 실행됩니다.


2. OnEnable

OnEnable는 게임 오브젝트에 적용할 때 enable이 true인 상태로 게임을 실행할 경우 실행됩니다.
게임 오브젝트가 활성화 될 때 (스크립트도 활성화 상태)도 호출됩니다.

게임 실행 후에도 스크립트가 활성화 상태가 되면 항상 실행됩니다.



3. Reset

Reset 함수는 게임이 실행되지 않고 있는 상태, 즉 에디터 모드일때만 실행되는 초기화 함수입니다.

게임 오브젝트에 스크립트를 적용시 자동으로 1회 호출됩니다.

설정 드롭 다운 버튼(스크립트명의 우측 톱니바퀴)에 포함된 Reset 메뉴 실행시에도 실행됩니다.



4. Start

Start는 게임을 초기화 하는 용도로 많이 사용되는 함수로 게임 실행시 1회만 실행되는 함수입니다.

Awake와는 다르게 게임 오브젝트와 스크립트가 모두 활성화가 되어있는 상태에서만 실행됩니다.


5. FixedUpdate

FixedUpdate는 시간에 따라 반복 호출되는 함수입니다.

주로 물리 동작을 처리할 때 많이 사용됩니다.


6. Physics

게임 오브젝트에 물리를 적용하면 해당 오브젝트에 적용된 스크립트에 물리 함수들이 호출됩니다.

예를 들어 Collider 를 적용한 상태라면, OnTriggerEnter, OnCollisionEnter 등의 함수들을 선언하면 호출이 됩니다.

여러가지 물리 함수들이 있지만 나중에 기회가 되면 설명을 올리겠습니다.


7. Inputs

게임을 하기 위해 사용되는 입력장치들의 값을 받아서 사용할 수 있도록 도와주는 입력 함수들이 호출됩니다.

예를 들어 마우스를 입력 받으려면 OnMouseDown, OnMouseUp 등의 함수들을 선언하면 호출됩니다.


8. Update

Update는 프레임에 따라 반복 호출되는 함수입니다.

게임 개발시 가장 많이 사용되는 함수로 많은 동작들을 구현하는데 사용됩니다.


9. Coroutine

비동기식 함수를 구현할 때 많이 사용되는 Coroutine에서 필요한 함수들이 호출됩니다.

yield null, yield WaitForSecond 등

yield WaitForFixedUpdate, yield WaitForEndOfFrame 은 제외


10. LateUpdate

LateUpdate는 애니메이션 매 프레임이 끝난 후에 호출되는 반복 호출 함수입니다.


11. Scene Rendering

화면 출력에 관련된 함수들이 호출됩니다.
OnPreRender, OnPostRender 등의 함수들이 있으며, 주로 카메라 효과를 구현할 때 사용됩니다.

12. OnDrawGizmos

OnDrawGizmos는 에디터 창에 Gizmo가 출력될 때 호출됩니다.
에디터 창에 이동 가이드 라인 등의 기능을 구현 할 때 많이 사용됩니다.


13. OnGUI

OnGUI는 게임 화면상에 UI를 출력할 때 호출되는 함수로 매 프레임마다 호출됩니다.


14. Application

응용프로그램이 중지되거나 종료되는 때 호출되는 함수로 OnApplicaionPause, OnApplicationQuit가 있습니다.


15. OnDisable

OnDisable은 OnEnable과 반대되는 함수로 게임 오브젝트가 비활성화 되거나 스크립트가 비활성화되면 호출됩니다.


16. OnDestroy

OnDestroy는 게임 실행 중 스크립트가 게임 오브젝트에서 제거되거나 게임 오브젝트가 제거(파괴) 될 때 호출됩니다.






이상으로 유니티 이벤트 함수 실행 순서에 대한 설명을 마치겠습니다.

그럼 또 다른 팁으로 다시 찾아뵐게요~



참고자료 :

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