본문 바로가기

Unity/Problems

생명주기로 인한 NullReferenceException

 

 

ObjectPool을 Load하는데 NullReferenceException에러가 생겼다.

 

 

 

문제는 ObjectPool.GetInstance().LoadAllAsset(); 에서 NullReferenceException 에러가 났는데,

 

 

ObjectPool에서부터 에러가난것 같아 보였다.

 

 

 

해결

 

에러의 이유는 new 지정자를 사용해 객체화 시켜주는 것을 Awake에 해주냐,

Start에 해주냐의 문제였다.

생명주기를 고려했을때 인스턴스화와 동시에 Awake가 먼저 실행되고 그 후에 Start가 실행되기 때문에

new 지정자를 Start에서 사용했을때 우선순위의 문제가 생기게 되는것이다.

 

그렇다면 왜? Start에서 사용했을때는 안되는걸까?

그리고 스크립트가 많아지고 겹치게되면 생명주기가 어떻게 되는걸까?

 

강사님의 설명 : Start보다 Init이 더 먼저 실행되기 때문에 안됨.

객체화는 Awake에서 하자.

 

 

 

 

 

편안하게 해결되었다.