코드를 짜다보면 가끔 코드의 구동 순서 때문에 꼬이는 경우가 발생합니다.
이전에 튜터님께서 강의로 한 번 설명을 해주셨던 거 같지만 스스로 이해가 덜 되었는지
같은 실수를 반복하기에 내용을 한번 참고자료와 함께 적립해보겠습니다.
이벤트 함수 실행 순서(Execution Order of Event Functions) - Unity 매뉴얼
🏸 Awake의 사용 시기?
Awake는 보시는 바와 같이 맨 처음에 시작하게 됩니다. 그럼 처음에 시작하면 안되는 것이 뭐가 있을까요?
그건 바로 자신이 아닌 타 오브젝트의 스크립트 또는 변수의 값을 가져오는 것입니다. 많은 Awake 중에서 누가 먼저인지도 모르는데 Awake로 다른 스크립트를 불러올 시, 그 오브젝트는 Awake되지 않은 Null 값일 수 있습니다. Component는 게임오브젝트에 붙이게 되는데 이 때문에 다른 게임오브젝트를 건드는 것도 Start에서 하는 것이 안전해보입니다.
하면 안되는 것 ❌ : 다른 Awake 스크립트 건들기
🏸 OnEnable의 사용 시기?
OnEnable은 오브젝트가 활성화될 때를 의미합니다. SetActvie(true) 또는 생성, 맨 처음 시작했을 때 인스펙터에서 활성화되어있다면 실행합니다. Awake와 Start와는 다르게 활성화될 때마다 생성되기에 한 번만 사용하는 것은 Awake 또는 Start를 활용해야합니다. OnEnable은 주로 활성화될 때 한 번만 초기 세팅을 해줘야할 경우에 사용하게 됩니다.
하면 안되는 것 ❌ : 한 번만 실행해야하는 함수 넣기
🏸 Start의 사용 시기?
Start의 사용 시기는 간단합니다. Awake에서 필요하지만, 다른 스크립트의 준비시간을 주기위해 못 썼던 타 스크립트에서 받아올 정보들 및 스크립트의 초기 세팅을 해주면 됩니다. 주의할 점은 Awake와는 반대로 스스로 받아올 수 있는 컴포넌트는 Awake에서 해주셔야 다른 스크립트에서 이 스크립트를 접근할 때 코드가 꼬이지 않습니다.
하면 안되는 것 ❌ : 본인이 받아올 수 있는 스크립트를 Start에 적기(Awake에서 해주셔야함)
🏸 OnDisable의 사용 시기?
OnDisable은 OnEnable과 반대이니 그대로 비활성화될 때 실행합니다. 단순히 SetActive(false) 때는 실행이 되지만, Destroy 같은 경우에도 OnDisable이 실행됩니다. 저는 주로 OnEnable과 연계해서 쓰는 편이며, Enable에서 설정한 것을 Disable에서 해제하는 방법을 사용합니다. 예시로는 Coroutine이나 애니메이션 값 정지 또는 초기화 등이 있습니다.
하면 안되는 것 ❌ : 특별히 문제 생긴적은 없는 거 같습니다.
'유니티 스파르타 캠프 7주차' 카테고리의 다른 글
250523 코드구조 어떻게 짜야할까? (0) | 2025.05.23 |
---|---|
250522 유니티로 쉽게 데이터 관리하는 방법 (0) | 2025.05.22 |
250521 인터페이스, 상속, 그리고 Static (0) | 2025.05.21 |
250520 3D 회전 Quaternion 문제 해결 (0) | 2025.05.20 |