유니티의 이벤트 함수 실행순서를 살펴보면 Awake가 먼저 실행되고 Start가 실행됩니다.
Awake
- Awake는 Start보다 무조건 먼저 실행됩니다.
- 프리팹이 인스턴스화 된 직후에 호출됩니다. 오브젝트가 비활성화되어 있다면 awake 함수는 호출되지 않다가 오브젝트가 활성되는 순간 호출됩니다. 그 후 오브젝트를 비활성화(Deactive) -> 활성화(Active) 해도 다시 호출되지 않습니다. 최초 1회만 호출됩니다.
- 보통 변수등의 초기화, 스크립트간 참조(reference)를 Awake에서 해줍니다.
- Awake 만 있는 스크립트에 경우 스크립트 활성화(Enable) 버튼이 뜨지 않습니다. OnEnable, Start 같은 함수가 있어 스크립트가 비활성화(Disable) 해 놓았더라도 Awake 함수는 호출됩니다.
[주의할 점]:
각 게임 오브젝트의 Awake()의 호출 순서는 랜덤이기 때문에, 스크립트간의 참조(reference) 설정을 위해서만 Awake를 사용하고, 그걸 이용해서 정보를 주고 받을 때는 Start를 사용해야 합니다.(Start 과정에서는 이미 모든 오브젝트들의 Awake가 끝났기 떄문에)
Start
- Start는 Awake보다 늦게 실행됩니다.
- 스크립트 인스턴스가 활성화된 경우에 호출합니다. 즉 게임 오브젝트 + 스크립트 모두 활성화되어있을 때 최초 1회의 한정하여 호출합니다. 호출 시기는 첫 번째 프레임 업데이트 전입니다.
gameObject.SetActive(false)와 this.enabled=false 차이
(링크)
1번은 gameObject.SetActive(false)
2번은 this.enabled=false
1의 체크가 해제된 상태(=gameObject.SetActive(false))일때
A) 게임오브젝트를 비활성화한 상태로 게임을 시작하면, 또는
B) 프리팹 설정에서 1번 체크박스를 꺼놓은 프리팹을 게임 중에 Instantiate(prefab) 으로 생성할 경우
Awake도, Start도, OnEnable도 모두 호출되지 않습니다.
만약 이걸 다시 체크하게 된다면, Awake,OnEnable,Start가 실행될 것입니다.
2의 체크만 해제된 상태(=this.enabled=false)일때
위 사진의 1번 체크박스는 켜져있지만 2번 체크박스는 꺼진 상태를 의미합니다.
게임 오브젝트는 활성화되어 있기때문에 Awake는 호출되지만,Start()와 OnEnable()는 호출되지 않습니다.
이 두 함수는 컴포넌트의 활성화 여부에 따라 호출됩니다.
게임이 돌아가는 도중에 체크박스를 켜거나 GetComponent<Component>().enabled = true 설정을 하면, 그 이후 OnEnable과 Start가 호출되게 됩니다.
'유니티' 카테고리의 다른 글
[Unity] Input System을 스크립트에서 사용하는법 (0) | 2023.01.25 |
---|---|
[Unity] Input받는 방법 (Input System 이용) (0) | 2023.01.25 |
[Unity] 오브젝트를 이동시키는 방법들 (2) | 2023.01.22 |
[Unity] Update(), FixedUpdate() 그리고 Physics Loop (0) | 2023.01.21 |
[Unity] tag, layer, sorting layer차이 (0) | 2023.01.21 |