
유니티에서 처음 스크립트를 생성하면, MonoBehavior를 상속 받으며, Start()메서드와 Update() 메서드가 자동으로 생성되어 있는 클래스 스크립트가 생성된다.
별다른 조작을 하지 않아도, 해당 스크립트를 컴포넌트로 가지고 있는 오브젝트가 씬에 있다면, Start메서드에 작성한 코드는 시작할 때, 작동하고, Update에 작성한 코드는 매 프레임마다 작동하게 된다.
이 두 메서드들이 바로 유니티의 생명주기 함수에 포함된다.
위 이미지는 Unity 매뉴얼에 있는 생명주기함수의 차트이다.
캠프 중 프로젝트를 진행해보면서, 생명주기함수에 의한 오류가 종종 발생해 한번 이렇게 정리를 하는 것이 좋다는 생각을 하게 되었다.
1. Awake()
Awake()메서드는 오브젝트가 활성화 되었을 때, 제일 먼저 호출되는 메서드이다.
보통 GetComponent<>() 같은 초기화 작업을 주로 Awake에서 선언하게 된다.
2. OnEnable(), OnDisable()
OnEnable은 오브젝트가 활성화 될 때 호출되며, OnDisable은 비활성화 될 때 호출된다.
보통, 이벤트를 구독, 해제 할 때 사용되거나, 오브젝트풀에서 사용되는 오브젝트의 초기화, 리셋에 사용한다.
3. Start()
Awake와 OnEnable의 실행 뒤에, Start메서드가 호출된다.
보통 Awake에서 초기화 된 후 따로 설정이 필요한 경우 Start에서 이를 제어할 수 있다.
주로 오류가 많이 나는 부분이 Awake와 Start의 순서 문제로 NullReference가 뜨는 문제였는데,
대게, 그 부분을 Awake와 Start를 신경쓰며 바꾸면 해결되는 문제가 많았다.
4. Update(), FixedUpdate(), LateUpdate()
모두 일정 간격마다 실행된다는 공통점이 있는 Update메서드들이다.
Update는 기본적으로 매 프레임마다 실행된다는 특징이 있다.
때문에 같은 코드를 작성해도, 실행하는 기기마다 다르게 작동할 가능성이 존재한다.
FixedUpdate는 고정된 물리업데이트 주기에 따라 호출된다.
Rigidbody와 관련된 물리 처리를 해당 메서드에서 사용하게 된다.
LateUpdate는 모든 Update가 끝난 뒤에 실행된다.
모든 처리가 완료된 후에 적용되는 메서드라고 할 수 있기 때문에, 주로 카메라의 이동을 해당 메서드에서 처리한다.
5. OnDestroy()
게임 오브젝트가 삭제되거나, 씬이 언로드 될때 호출된다.
객체가 삭제될 때, 작동해야하는 기능을 주로 작성한다.
6. OnCollisionEnter(), OnTriggerEnter()
보통 충돌시 발생하는 것으로 알고 있지만, 순서적으로는 FixedUpdate와 Update 사이에 발생한다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 내일배움캠프 47일차 TIL "유닛 생성 개선" (0) | 2024.11.22 |
|---|---|
| 내일배움캠프 46일차 TIL "유닛 스탯 적용 트러블 슈팅" (0) | 2024.11.21 |
| 내일배움캠프 44일차 TIL "유닛에 상태 패턴 적용" (0) | 2024.11.19 |
| 내일배움캠프 43일차 TIL "Sprite Atlas" (0) | 2024.11.18 |
| 내일배움캠프 42일차 TIL "유니티에서 코딩할 때 안 좋은 습관" (0) | 2024.11.15 |