프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

프로젝트 중에 Awake()와 Start()의 차이를 제대로 인지하지 못하여 발생한 오류에 대해 설명해 보겠다.

 

 

출처: https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html

 

일단 MonoBehaviour.Awake() 와 MonoBehaviour.Start()는 위와 같은 순서를 가진다.

빈번히 사용하는 Update()와 달리 Awake()와 Start()는 Initalization 구역으로 스크립트의 초기화에 이용된다.

 

단, 호출의 순서는 Awake() -> Start()로 Awake()가 먼저 호출되는데, 

둘의 차이는 Awake는 모든 오브젝트가 초기화되고 호출되고, Start는 스크립트 인스턴스가 활성화된 경우에만 호출된다는 점이다.

 

 

간단히 말하면, Awake는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출

Start는 첫 번째 프레임의 업데이트 전에 Start가 호출된다.

 

 

만약 Start만으로 모든 스크립트를 초기화한다고 생각해보자.

UnitA와 EnemyA에게 적용한 스크립트가 각각 다르고 유닛들을 관리하는 Controller의 Start에서 각 유닛을 Instantiate()하고 스크립트 정보를 컴포넌트로 가져온다고 생각해보자.

 

Controller가 각 유닛을 인스턴스화 하기 때문에 가장 먼저 호출되는 Start는 Controller의 start이다.

두 유닛을 소환한다면 두 유닛의 Start는 Controller의 start가 끝나고 호출될까? 아니면 먼저 호출될까?

 

경험해본 바로는 Controller의 start가 먼저 실행되는 것 같지만, 순서는 확정할 수 없을 것 같다.

본인의 경우는 결국 Controller의 Start는 자신이 인스턴스화한 유닛의 스크립트들이 start로 초기화된 정보가 없기 때문에 nullreference오류를 발생시켰다.

 

 

이런 경우와 같이 스크립트간의 참조를 설정을 하기 위해서는 Awake()를 사용해주어야 한다.

Awake는 모든 오브젝트가 초기화되고 호출되기 때문에 다른 스크립트와 연결을 보장할 수 있다.

다른 스크립트들을 많이 참조하는 프로젝트일수록 Awake()의 사용을 권장해야 할 것 같다.

 

이렇게만 보면 Start를 굳이 사용해야 하나 생각이 들긴하는데, 모든 초기화가 끝난 후 다음 순서로 실행할 필요가 있는 작업에는 Start를 사용해보면 편할 듯하다.

 

 

출처

 

https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.Awake.html

 

Unity - 스크립팅 API: MonoBehaviour.Awake()

Awake는 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출됩니다. 스크립트 인스턴스가 종료될 때까지 한번만 호출됩니다. Awake는 모든 오브젝트가 초기화되고 호출되기

docs.unity3d.com

 

https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.Start.html

 

Unity - 스크립팅 API: MonoBehaviour.Start()

Start는 해당 Behaviour의 주기동안에 한번만 호출됩니다. Awake와 Start의 다른점은 Start는 스크립트 인스턴스가 활성화된 경우에만 호출된다는 점입니다. Start를 이용해서 초기화에 대한 준비가 될 때

docs.unity3d.com

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함