유니티에서 스크립트를 생성하고 스크립트를 열어보면 Start 함수와 Update 함수가 있는 것을 볼 수 있습니다.
이러한 함수들을 이벤트 함수라고 하며, 이벤트 함수에는 Start와 Update 말고도 여러 가지 함수가 있습니다.
유니티에서는 이런 이벤트 함수들의 실행 순서를 지정해놓았으며, 실행 순서를 생명주기라고 합니다.
스크립트의 생명주기와 각종 이벤트 함수들을 이해하고 있으면 적절한 상황에 적절한 이벤트 함수를 사용할 수 있습니다.
아래 사진은 유니티 스크립트의 생명주기를 나타낸 다이어그램입니다.
스크립트의 생명주기는 크게 3단계로 나눌 수 있습니다.
- 시작 단계 (생성 및 초기화) : Awake, OnEnable, Start
- 업데이트 단계: FixedUpdate, Update, LateUpdate, OnTrigger, OnCollision, yield, ...
- 종료 단계 (비활성화 및 삭제) : OnApplicationQuit, OnDisable, OnDestroy
위의 다이어그램대로 스크립트는 Awake, OnEnable, Start 함수들을 실행한 이후 업데이트 단계에 있는 이벤트 함수들을 순환적으로 실행하다가 비활성화 또는 파괴가 되면 생명주기가 끝이 나게 됩니다.
다이어그램에 나와있는 함수들은 유니티 내부적으로 자동으로 실행이 되는 함수들도 있습니다만, 유저가 직접 함수들을 가져다가 쓰는 경우가 대부분입니다. 자주 사용되는 이벤트 함수들을 알려드리겠습니다.
1. Awake
Awake 함수는 항상 Start 함수 전에 호출이 되며, 씬의 모든 오브젝트가 초기화된 직후에 호출이 됩니다.
스크립트가 비활성화 상태에 있더라도 Awake 함수는 호출이 되지만 게임 오브젝트가 비활성화 상태라면 호출되지 않습니다.
Awake 함수는 오브젝트 별로 단 한 번만 호출이 되며, 변수 및 참조를 초기화하기 위한 목적으로 주로 사용됩니다.
2. OnEnable
OnEnable 함수는 오브젝트가 활성화된 직후에 호출됩니다. 오브젝트가 활성화되지 않았다면 호출하지 않으며, Awake 함수와 다르게 활성화가 될 때마다 호출이 됩니다. 이러한 특성으로 오브젝트 풀링 기법에서 사용될 수 있습니다.
3. Start
Start 함수는 오브젝트가 활성화된 경우에 한해서 첫 번째 프레임 업데이트 전에 한 번만 실행이 됩니다.
스크립트가 비활성화된 경우에는 실행하지 않으며, 코루틴을 사용하여 호출할 수 있습니다.
4. FixedUpdate
FixedUpdate는 일정한 주기로 호출되는 Update 함수입니다. 기본값은 0.02초마다 한 번씩 실행이 되며 호출주기는 수정이 가능합니다. Update 함수는 호출주기가 매번 다르기 때문에 고정적으로 실행해야 하는 코드를 작성하기 용이합니다.
5. Update
Update 함수는 프레임당 1번 실행이 됩니다. 게임 내 프레임단위로 업데이트가 필요한 경우에 사용합니다.
6. LateUpdate
LateUpdate 함수는 Update 함수가 끝난 이후 프레임당 1번 실행되는 함수입니다. Update에서 수행한 코드를 LateUpdate에서 이어받아서 계산할 때 사용할 수 있습니다.
7. OnTrigger
OnTriggerEnter, OnTriggerStay, OnTriggerExit 함수들이 있으며, 이는 충돌을 감지하는 Trigger와 닿았을 때 호출됩니다.
OnTriggerEnter는 충돌감지 직후에 호출이 되고, OnTriggerStay는 충돌감지중일 때 계속 호출이 되고, OnTriggerExit는 충돌감지가 끝난 직후 호출이 됩니다.
8. OnCollision
OnCollisionEnter, OnCollisionStay, OnCollisionExit 함수들이 있으며, 이는 다른 콜라이더와 충돌했을 때 호출됩니다.
OnCollisionEnter는 충돌 직후에 호출이 되고, OnCollisionStay는 충돌중일 때 계속 호출이 되고, OnCollisionExit는 충돌이 끝난 직후에 호출이 됩니다.
9. OnMouse
OnMouseDown, OnMouseDrag, OnMouseEnter 등의 함수들이 있으며, 마우스를 클릭하거나 드래그, 또는 클릭한 마우스를 뗐을 때 호출이 됩니다.
10. OnDisable
OnDisable 함수는 OnEnable 함수와 반대로 오브젝트가 비활성화될 때 호출됩니다. 마찬가지로 오브젝트가 비활성화 될 때마다 호출이 가능되며 여러 번 호출이 가능합니다.
11. OnDestroy
OnDestroy 함수는 오브젝트가 파괴될 때 호출되는 함수입니다. 마지막 프레임 업데이트 이후에 호출되며 오브젝트 파괴 시 특정 코드를 실행하기 위해서 사용합니다.
'Engine > Unity' 카테고리의 다른 글
[Unity] 유니티 이벤트 함수 (Awake, Start, Update, FixedUpdate, LateUpdate 차이점) (0) | 2024.05.21 |
---|---|
[Unity] TMP 사용방법 / 한글 폰트 깨질 때 (0) | 2024.05.06 |
[Unity] 오브젝트 이동시키는 방법 (0) | 2024.04.04 |
[Unity] Ray / Raycast / RaycastHit (레이캐스트) (2) | 2024.03.26 |
[Unity] 싱글톤 패턴 (Singleton) (2) | 2024.03.20 |