티스토리 뷰
## `GameObject.SetActive`와 `Behaviour.enabled`
- GameObject 활성여부 vs 컴포넌트의 활성여부
- Scene내 객체(GameObject)의 활성여부 vs 객체내 부품(Component)의 활성여부(동작가능 : e.g. Update)
- 참고로 Transform의 경우 Bahaviour가 아닌 Component에서 바로 상속하기에 enabled가 없음. 즉, 항상 동작.
## MonoBehaviour 파생 클래스의 생성자
- Unity Engine 및 직렬화 시스템에 의해 생성자가 여러번 호출될 수 있으니 pure C# API class에만 사용하고 Unity API class에는 사용금지
- 참고로 `RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)` 호출전에 빌드된 모든 MonoBehaviour script의 생성자가 호출되는듯(Subsystem에 Scripting이 있음)
## Awake()
- 해당 Script lifetime 동안 정확히 한번만 호출됨
- Script 인스턴스가 로드될 때 호출(e.g. `Object.Instantiate`, Scene로드)
- Scene의 모든 활성 GameObject가 초기화된 후 호출됨. 따라서 해당 메서드내에서 `GameObject.FindWithTag` 등으로 쿼리 가능하지만 쿼리된 객체의 Awake()가 먼저 호출되었는지는 보장되지 않으므로 참조하는 객체 속성 할당 또는 사용에는 주의가 필요함
- 비활성화(`SetActive(false)`) 상태로 인스턴스가 로드되면 최초 활성화 이전까지 Awake호출이 지연됨에 주의
- 해당 Component의 활성화(enabled) 여부와 상관없이 초기화시 호출됨
- 객체 초기화에 사용 (Coroutine으로 정의 불가)
## OnEnable()
- 객체가 enabled 되거나 active될 때 호출
- 활성화 될때마다 초기화가 필요한 로직은 해당 메서드에서 구현
## Start()
- 해당 Script lifetime 동안 정확히 한번만 호출됨
- 해당 객체의 최초 Update() 호출 직전에 호출됨
- 비활성화(Disabled) 상태인 경우 Awake()와 동일한 frame에서 호출되지 않을 수 있음
- "Where objects are instantiated during gameplay, their Awake function is called after the Start functions of Scene objects have already completed." (공식문서에 뭔소린지? 왜케 일관성이 없지?? 이미 Scene및 Update들이 열나게 돌아가는중에는 중간에 인스턴스화되는 객체들의 Awake 호출 순서는 보장되지 않는다는건가?? 차후 테스트 필요)
- 객체 상태 시작에 사용 (Coroutine으로 정의 가능 - Unity Engine에서 비동기로 호출함)
## Update()
- MonoBehaviour가 enabled된 경우 모든 frame에서 호출됨
## OnApplicationPause()
- 일시정지가 감지된 frame의 끝에 호출됨
- 일시정지 그래픽 표시를 위해 호출이후 frame이 1회 추가 실행됨
## OnApplicationQuit()
- 앱 종료전 모든 GameObject에서 호출
## OnDisable()
- 객체(부착된 Behaviour)가 disabled 되거나 destroy될 때 호출
## OnDestroy()
- 객체(부착된 Behaviour)가 파괴될 때 호출(e.g. 오브젝트 소멸)
- 마지막 프레임까지 Update를 마친 뒤 호출됨
기타 다른것들은 아래 링크 참조
## References
https://docs.unity3d.com/kr/2021.3/Manual/ExecutionOrder.html
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html
'Game > 개발' 카테고리의 다른 글
[Unity] Addressables (v1.19.19 기준 - Editor 2021.3) (0) | 2023.03.23 |
---|---|
[Unity] Assembly Definition (어셈블리 정의) (0) | 2023.03.16 |
[Unity] Preprocessor directives & Conditional Compilation (전처리기 지시문 및 조건부 컴파일) (0) | 2023.03.15 |
[Unity/C#] Singleton Pattern (싱글톤) (0) | 2023.02.14 |
[RuntimeInitializeOnLoadMethod] Unity 런타임 초기화 method 정의를 위한 attribute (0) | 2022.10.20 |
- Total
- Today
- Yesterday
- gcp
- selenium
- Custom Package
- unity
- 싱글톤
- 환경설정
- logging
- 유니티
- Addressables
- await
- firestore
- RuntimeInitializeOnLoadMethod
- git
- Visual Studio Code
- async
- VS2022
- coroutine
- github
- C#
- initialize
- .net
- framework
- 닷넷
- Scraping
- Singleton
- 비동기
- Python
- 코루틴
- vscode
- Debug
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |