티스토리 뷰
인스턴스 라이프 사이클
※ 자주 사용되는 단계는 굵게(Bold) 표시한다.
최초 씬 로드 단계
- Awake()
- 프리팹 | 게임 오브젝트가 인스턴스화 된 직후에 호출된다.
- 단, 처음 부터 비활성 상태인 경우에는 호출되지 않으며, 활성화가 되면 그 때 호출된다.
- 주로 변수 초기화나 싱글톤 형성 같은 사전 작업을 위해서 사용된다.
┗ 단, 변수 초기화는 Start를 사용하는 경우가 더 많다.
- OnEnable()
- 오브젝트 활성화 직후 호출된다. Awake() 보다는 타이밍이 늦다.
에디터
- Reset
- 스크립트가 처음으로 객체에 연결되거나 Reset 커맨드를 사용할 때, 스크립트의 속성(Property)를 초기화 하기 위해서 사용하는 함수.
- OnValidate
- 오브젝트가 역직렬화 될 때를 포함하여 스크립트의 속성이 설정(변경)되었을 때 호출된다.
※ 역직렬화(Deserialized) : 직렬화의 반대로, 단편화된 데이터를 원래 형태로 되돌리는 것을 의미한다.
※ 직렬화(Serialized) : 특정 데이터를 통신이나 저장이 가능한 단편적인 형태로 변환하는 것.
- 오브젝트가 역직렬화 될 때를 포함하여 스크립트의 속성이 설정(변경)되었을 때 호출된다.
게임 실행
- Start
- 인스턴스가 활성화된 이후 첫 프레임 업데이트 전에 호출.
- 주로 초기화나, 시작 위치 선정 등, 최초 상태의 형성을 위해서 사용된다.
- OnApplicationPause
- 중단이 감지된 프레임의 다음에 발생하는 함수.
- 이 함수가 호출된 바로 다음 프레임이 issue된다.(= 화면이 멈춘다.)
- 주로 화면에서 벗어날 경우의 행동에 대한 처리용으로 사용한다.
- Update
- 활성화 상태라면 매 프레임 마다 호출되는 함수. 때문에 객체의 상호작용은 거의 이 함수로 서술된다.
- 종류가 여럿 존재한다.
- FixedUpdate: 프레임이 아닌, 시간 단위로 발생하는 함수. 이동이나 시간에 관계된 요소에 자주 쓰인다.
- Update: 프레임 마다 발생하는 함수. 가장 많이 사용되는 함수이기도 하다.
- LateUpdate: Update 발생 이후 발생하는 함수. Update에서 확실한 선후 관계가 필요한 경우 사용된다.
- Coroutine
- 코루틴은 자신의 발동 조건(yield문 내용)이 만족됬을 때, Update가 반환된 후 실행된다.
┗ yield return null이 1프레임 마다 실행되는 이유이기도 하다. 기준은 Update와 동일한 타이밍이기 때문. - 코루틴 안에서 코루틴을 호출하여 사용할 수도 있다.
- 단, 코루틴 자체가 가비지를 많이 생성하기 때문에 되도록이면 지양하는 것이 좋다.
- 코루틴은 자신의 발동 조건(yield문 내용)이 만족됬을 때, Update가 반환된 후 실행된다.
- OnEnable
- 해당 객체가 활성화될 때 마다 호출된다.
- OnDisable
- 해당 객체가 비 활성화될 때 마다 호출된다.
- OnDestroy
- 해당 객체가 파괴될 때, 그 마지막 프레임 이후에 호출된다.
- Object.Destroy나 씬 종료 시 액션을 작성하는 용도로 사용 가능. (대표적으로 점수 판정)
게임 종료
- OnApplicationQuit: 어플리케이션이 종료되기 직전에 호출된다. Unity 내부 테스트 기능을 중지할 때에서 호출된다.
- OnDisable: 비활성 상태로 전환될 때 호출된 다.
렌더링
- OnPreCull: 카메라가 씬을 컬링하기 전에 호출된다.
※ 컬링(culling): 카메라에 표시될 오브젝트를 결정하는 연산 - OnBecameVisible: 오브젝트가 카메라에 표시되는 경우 호출된다.
- OnBecameInvisible: 오브젝트가 카메라에 표시되지 않을 때 호출된다.
- OnWillRenderObject: 오브젝트가 카메라에 처음 표시될 때 호출된다. 카메라 별로 개별로 판정한다.
- OnPreRender: 카메라가 씬 렌더링을 시작하기 전에 호출된다.
※ 렌더(Render): 오브젝트를 시각화 하는 것. - OnRenderObject: 모든 일반 렌더링이 처리된 후 호출된다.
- OnPostRender: 카메라가 씬 렌더링을 끝낸 뒤 호출된다.
- OnRenderImage: 씬 렌더링이 완료된 후 호출된다. 이미지의 포스트 프로세싱이 가능.
- OnGUI: GUI 이벤트가 발생 시 호출된다. 프레임 당 여러번 발생.
- OnDrawGizmos:씬 뷰에 기즈모를 그릴 때 사용된다.
┗ 기즈모(Gizmo): 테스트 등의 목적으로 특정한 형태의 추상적인 도형을 그리는 것.
에니메이션 업데이트 루프나 프로파일 마커에 따른 이벤트 함수도 존재하나, 이에 대해서는 [https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html]를 참고할 것.
정리하며
기존에는 간략하게 순서나 용도 만 알고 있었던 부분들을 다시금 정리하면서 다양한 사실을 알게 되었습니다.
특히 코루틴의 발생 시점을 통해 yield return null이 왜 매 프레임 바다 발동되는 것인지 알게되어, 적잖게 놀랐던 점이 인상적이었습니다.
또한, 렌더링 정도에 따른 이벤트를 통해서 화면에서 가려지는 경우나 화면에 표시되는 경우를 간편하게 구성할 수 있다는 점도 흥미로웠습니다.
'스파르타 내일배움캠프 > Today I Learned' 카테고리의 다른 글
Today I Learned - Day 5 [싱글톤] (0) | 2024.09.13 |
---|---|
Today I Learned - Day 4 [스파게티 코드에 대해서] (4) | 2024.09.12 |
Today I Learned - Day 2 (0) | 2024.09.10 |
Today I Learnd - Day 1 (0) | 2024.09.09 |
(사전 캠프) Day 19 [실전 제작: 멍뭉이! 멍멍뭉!] (2) | 2024.09.06 |