Unity 생명주기란?
- 게임이 진행되는 흐름, 그리고 그 흐름에 따라 오브젝트들이 할 역할들을 정해주는 것
- 사용자가 호출하지 않아도 호출되는 함수의 호출 주기
MonoBehaviour 클래스의 주요 메서드와 그 기능
- 게임 오브젝트의 동작을 정의하는 기본 클래스
- 이 클래스의 여러 메서드들은 Unity의 생명주기를 통해 자동으로 호출
Start와 Awake의 차이점
- Awake는 비활성화 상태에서도 호출되고 Start 는 활성화 상태일 때만 호출된다
Reset : 오브젝트를 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행. 객체의 속성을 초기 값으로 설정해 줄 때 사용.
Awake : 스크립트가 실행될 때 한 번 호출. 모든 오브젝트가 초기화 된 후 호출되기 때문에 GameObject.Find 같은 명령문을 안전하게 사용할 수 있다. Awake 함수는 언제나 Start 함수 전에 호출되므로 초기화 순서를 정할 수 있다. (Coroutine 사용 불가)
OnEnable : 인스펙터뷰에서 체크를 통해서 게임 오브젝트를 활성화 할 때 사용. 활성화 할 때마다 호출.
Start : Update 함수가 호출되기 전에 한 번 호출. 다른 스크립트의 모든 Awake가 모두 실행된 이후에 실행. 스크립트가 활성화 되어 있어야 한다.
FixedUpdate : 주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가할 때 사용하는 함수. 발생 주기가 일정. (Default : 0.02초)
Update : 프레임마다 호출되는 함수로 게임의 핵심 로직에 사용. 스크립트가 활성화 되있어야 사용 가능하고, 주기가 일정하지 않다.
LateUpdate : 모든 Update 함수가 실행되고 나서 호출. 주로 카메라 이동 로직에 사용.
OnDisable : 게임 오브젝트 또는 스크립트가 비 활성화 되었을 때 호출. (Coroutine 사용 불가)
OnDestroy : 오브젝트 생존기간의 마지막 프레임이 업데이트 된 후 실행. (Object.Destroy 또는 씬 종료 시)
OnApplicationQuit : 응용프로그램 종료 전에 모든 오브젝트에서 호출. 에디터에서는 플레이 모드를 중지하면 나타남.
Update, FixedUpdate, LateUpdate의 차이점
- Update는 주기적으로 호출되지 않는다. 1프레임이 완료되는데 걸린 시간은 Time.deltaTime을 통해 알 수 있다.
- FixedUpdate는 주기적으로 호출된다. FixedUpdate가 호출된 뒤 물리 계산이 수행된다. 따라서 물리 영향을 받는 오브젝트들은 이 함수에서 호출하는 것이 좋다
- LateUpdate는 모든 업데이트 함수가 호출된 뒤 호출된다. 카메라 이동 로직에 주로 쓰인다
Time.deltaTime이란 무엇이며, 사용하는 이유에 대해 설명
- 지난 프레임 이후 경과한 시간의 양 (프레임이 바뀔 때 마다 시간을 측정한 값)
- 게임 내에서 경과한 시간을 주관적으로 측정한 값이므로 적용된 시간의 스케일을 고려할 수 있다.
- 만약 1초에 프레임이 100번 바뀌면 Time.deltaTime은 0.01이고 50번 바뀌면 0.02초가 된다.
예시
1. Time.timeScale을 0으로 하면 Update와 FixedUpdate는 모두 호출이 되지 않을까요? 그 이유는 무엇일까요?
-> 호출되지 않는다. Time.timeScale을 0으로 하면 게임 내의 시간이 멈추기 때문이다
2. Update의 호출주기에 영향을 주는 것은 무엇일까요?
-> Time.delatTime
3. FixedUpdate의 호출주기에 영향을 주는 것은 무엇일까요?
-> Time.fixedDeltaTime
4. Awake와 Start, OnEnable의 호출 순서는 어떻게 될까요?
-> Awake - OnEnable - Start
'Study > 개념 정리' 카테고리의 다른 글
[Study] 최적화 (0) | 2024.07.17 |
---|---|
[Study] 코루틴 (0) | 2024.07.16 |
[Study] Queue (0) | 2024.07.12 |
[Study] Stack (0) | 2024.07.11 |
[Study] LinkedList (0) | 2024.07.10 |