유니티 생명주기 (Unity Lifecycle)
게임이 진행되는 정도에 따라 유니티에서 게임 오브젝트와 스크립트는 특정한 실행 흐름을 따른다.
유니티의 스크립트는 MonoBehaviour에서 상속 받아 생명주기 함수를 사용하는 것이다.
아래의 내용은 생명주기의 순서를 한눈에 정리한 것이지만
모든 메서드를 작성한 것이 아닌 자주 사용하는 메서드들을 정리한 것이다.
핵심적인 생명주기 함수와 역할
1. 객체 생성과 초기화
- Awake() : 가장 먼저 실행
- 오브젝트가 Scene에 생성될 때 가장 먼저 실행된다.
- (스크립트가 활성화 되면 가장 먼저 호출된다고 생각하면 된다)
- 비활성화(SetActive(false))된 오브젝트도 실행되는 특징이 있다.
- OnEnable() : 오브젝트 활성화 시 실행
- 게임 오브젝트가 활성화될 때(SetActive(true)) 실행된다.
- Awake() 이후, 오브젝트가 활성화될 때마다 호출된다. (다시 활성화해도 호출됨)
- Start() : Awake이후 1번만 실행
- Awake() 다음에 스크립트 활성화된 후 & 첫 번째 프레임이 시작되기 직전에 한 번만 실행됨.
- 모든 Awake가 실행된 이후 실행된다
2. 게임 실행 (프레임 단위 업데이트)
- Update() : 매 프레임 호출
- 매 프레임마다 호출되는 메서드.
- 게임의 로직이나 오브젝트의 상태를 업데이트 하는데 이용된다.
- FixedUpdate() : 물리적 연산
- Update()와 다르게 고정된 시간 간격으로 실행된다. (기존 0.02초, 임의로 조절 가능)
- 물리적 연산이 필요할 경우 사용되는 메서드이다.
- LateUpdate() : Update 이후 마지막 실행
- 모든 Update()가 실행 후 호출된다.
- 후처리 작업 및 카메라 트래킹 등 주요 동작 업데이트 이후 실행되어야 하는 코드를 작성한다.
3. 오브젝트 상태 변화 (비활성화 또는 파괴 시)
- OnDisable() : 오브젝트 비활성
- 오브젝트가 비활성화될 때 실행됨 (SetActive(false)).
- OnDestroy() : 오브젝트 파괴 시 실행
- 오브젝트가 파괴될 때, 즉, Destroy(gameObject)로 제거될 때 호출된다.
4. 게임 종료
- OnApplicationQuit()
- 게임이 종료될 때 호출됨.
- 데이터 저장, 로그 기록 등의 마무리 작업을 수행할 때 사용한다.
5. 그 외 메서드
- OnTriggerXXX
- 게임 내 Trigger 이벤트(강제 실행) 발생시 호출된다
- OnTriggerEnter, OnTriggerStay, OnTriggerExit
- OnCollisionXXX
- 게임내 Collision 이벤트(충돌) 발생 시 호출된다.
- 간단 정리
Scene에서 게임이 처음 시작되면
1. 객체를 생성하고 초기화 작업을 한 후 (Awake, OnEnalbe, Start)
2. 매 프레임마다 반복 실행을 하면서 (Update, FixeUpdate, LastUpdate)
3. 오브젝트의 상태 변화를 감지한다. ( OnDisable, OnDestroy )
4. 마지막으로는 게임이 종료된다. (OnApplicationQuit)
- 코루틴(Coroutine)에 대해
생명주기와 더불어서 유니티로 게임을 개발한다면 필수적으로 알면 좋은 내용이다.
일반적인 코루틴은 Update 함수가 반한된 후 실행되며 Update와 비슷하게 반복적인 작업을 할 때 사용하는 기능이지만
Update와 차이점은 시간이 걸리는 작업을 비동기적으로 사용할 때 사용한다
< 코루틴 사용 예시 >
1. 애니메이션이나 이펙트 연출 후 동작할 때 (몬스터 처치 후 서서히 사라지는 효과)
2. 일정한 간격으로 반복할 때 (3초마다 1번 실행)
3. 시간이 지나면서 변해야 하는 값이 있을 때 (체력이 서서히 회복 UI 효과)
4. 비동기적으로 작업을 해야할 때 (3초 후 실행 처럼 일정 시간 이후 특정 이벤트 실행)
5. 네트워크에서 요청 처리 작업을 할 때 (서버에서 데이터를 받고 대기 시간 동안 다른 작업 수행)
'Unity > Unity 프로그래밍' 카테고리의 다른 글
[C#/Unity] try-catch를 이용해 개발 진행하기 (0) | 2025.03.25 |
---|---|
[C#/Unity] Builder 패턴을 이용해서 캐릭터 기술 만들기! (0) | 2025.03.24 |
[C#/Unity] 델리게이트(Delegate): 함수를 변수처럼! (0) | 2025.03.24 |
[Unity/프로그래밍] enum 연습: 플레이어 상태에 따라 행동 결정하기 (0) | 2025.03.22 |
[Unity] 충돌 시스템을 활용한 범위 내(입장 시) 이벤트 실행하기 (0) | 2025.02.05 |