1. 유니티 Lifecycle
유니티 lifecycle은 유니티 내부에서 사용자가 호출하지 않아도 호출되는 함수들의 호출 주기이다.
좀 더 풀어서 이야기한다면 유니티 스크립트의 대부분은 Monobehaviour 클래스를 상속받아 만들어지는데, 이 클래스를 상속받은 오브젝트가 Scene에 있는 동안 자동으로 함수를 호출하는 패턴을 의미한다.
해당 글에서는 자주 사용되는 함수들만 정리할 것이다.
자세한 내용을 알고 싶다면 공식문서를 참조하자.
자주 사용하는 함수들을 전체적인 순서도로 나타내면 다음과 같다.
2. 중요 함수 기능
1) Initialization
Awake
- 스크립트가 실행될 때 1번만 호출된다. (game object 생성시 최초 실행)
- 오브젝트가 비활성화일 경우엔 호출되지 않지만 스크립트가 비활성화일 경우엔 호출된다.
- 게임의 상태 / 변수 초기화에 주로 사용된다.
- 오브젝트의 초기화 / 프리팹의 인스턴스화가 모두 진행된 직후에 호출되어서 Find함수 호출의 안정성을 보장한다.
- 코루틴으로 실행할 수 없다.
(언제나 Start 함수 전에 호출되어서 StartCoroutine을 사용할 수 없다.)
OnEnable
- 오브젝트 / 스크립트가 활성화될 때마다 호출된다.
- 이벤트 연결 시 사용한다.
(인스펙터 뷰에서 체크 및 스크립트 내에서 SetActive함수로 게임 오브젝트를 활성화 할 때마다 호출된다.)
- 코루틴으로 실행할 수 없다.
Start
- 스크립트가 활성화될 때 1번만 호출된다. (첫 번째 프레임 업데이트 전에 호출되기 때문)
- 오브젝트 / 스크립트가 비활성화일 경우 호출되지 않는다.
- 코루틴으로 실행할 수 있다.
(객체 1의 Awake함수에서 동적 생성한 멤버를 객체 2의 Awake함수에서 접근할 경우 : 동적 생성은 Awake로 하고, 동적 생성 멤버에 접근하는 초기화 코드는 Awake 이후인 Start에 넣어야 한다.
(오브젝트들의 Awake함수 호출 순서는 임의로 정할 수 없어 객체 2의 Awake가 먼저 호출되기 때문. = NullReferenceException 발생.) )
2) Physics
FixedUpdate
- 유니티 엔진이 물리 엔진 실행 전 물리 연산을 업데이트한다. (물리 엔진 사용시 일정 시간 간격으로 힘을 가하거나 체크할 때 사용)
- 고정된 프레임 주기로 호출된다.(그래서 cpu를 많이 사용한다. 보통 1초에 50회)
(프레임 속도가 높은 경우 프레임 사이에 호출되지 않기도 하고, 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있다.)
(프레임 속도와 관련 없이 호출되어서 움직임 계산을 적용할 때 Time.deltaTime만큼 값을 곱할 필요가 없다.)
- 스크립트가 활성화되어 있어야 호출된다.
OnTriggerXXX
- 두 오브젝트의 충돌 체크를 하는 함수이다. (물리적으로 반응하지 않고 감지만 하는 경우)
- 물리 연산을 하지 않고 통과한다.
OnCollisionXXX
- 두 오브젝트의 충돌 체크를 하는 함수이다. (rigidbody 접촉 발생 / 유지 / 분리시 사용)
- 물리 영향을 받으며 Rigidbody가 존재해야 한다.
Update
- 매 프레임마다 호출되는 함수. (주기적으로 변하는 게임 로직 구현에 주로 사용된다.)
(디바이스 성능 / 최적화 상황에 영향을 받아 framerate가 변하므로 함수 호출 시간에 차이가 있다.)
- 스크립트가 활성화되어 있어야 호출된다.
LateUpdate
- 모든 Update함수가 호출된 후 프레임당 1번씩 호출된다.
- 스크립트가 활성화되어 있어야 호출된다. (Update에서 수행된 계산은 LateUpdate 시작시 완료)
- 카메라 이동 로직에 주로 사용한다.
(캐릭터를 움직이고 Update로 방향을 바꾸게 하는 경우 이 함수가 모든 카메라 움직임 + 로테이션 계산을 수행할 수 있기 때문.)
(카메라가 포지션 추적 전에 캐릭터가 움직였는지 확인 가능)
3) Descommisioning
OnApplicationQuit
- 응용 프로그램 종료 전 모든 오브젝트에서 호출된다.
OnDisable
- 오브젝트 또는 스크립트가 비활성화될 때마다 호출된다.
- 이벤트 연결 종료 시 사용한다.
- 코루틴으로 실행할 수 없다.
OnDestroy
- 오브젝트의 생존 기간의 마지막 프레임이 업데이트된 후 실행된다.
- 라이프 사이클 내에서 사용한 자원들을 돌려 놓는 작업 실행.
3) 그 외 함수들 설명
Reset
- 유니티 에디터에서 오브젝트 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행된다.
- 객체 속성을 초기 값으로 설정할 때 사용한다.
- Awake 함수 전에 실행된다.
참고 링크
https://tech-interview.tistory.com/177
https://hangjastar.tistory.com/77
https://skuld2000.tistory.com/25
'unity' 카테고리의 다른 글
2. unity jelly mesh 적용 (0) | 2022.08.04 |
---|---|
0. 로그라이크 게임 기획 및 최소 기능 설명 (0) | 2022.08.02 |
1. 플레이어 키보드 움직임 구현 (0) | 2022.08.01 |
1. 유니티 게임오브젝트, 컴포넌트 기본 개념 (0) | 2022.07.12 |
0. 유니티 엔진 기본 설명 (0) | 2022.07.02 |