본문 바로가기
유니티/버그일지

[Unity] OnDestroy에 처리할 내용은 다른 함수에

by 개발펭귄 2020. 5. 18.

몬스터 오브젝트를 게임 내에서 제거하면(Destroy함수) 일련의 처리가 필요해서 OnDestroy 안에 코드를 작성했는데 이미 없어진 객체에 액세스 또는 참조하는 에러를 경험했다.

 

또 에디터의 PlayMode가 종료될 때 역시 Scene이 닫히면서 OnDestroy가 호출되는데, 씬 내에서 오브젝트가 제거되는 순서 역시 정해져있지 않기 때문에 에디터 내에서도 에러를 볼 수 있었다.

 

후자의 경우 오브젝트들이 제거되는 순서를 따로 명시해주는 걸로 해결할 수 있다.

 

전자의 경우 OnDestroy 안에 처리 내용을 작성하지 않고, 별도의 함수를 만들어 Destroy함수를 호출하기 전에 일련의 처리를 하고 Destroy를 호출했다.

//캐릭터를 죽인다.
void Kill()
{
	//처리할 내용....
    Destroy(this.gameobject);
}

이렇게 말이다. 가급적이면 OnDestroy 안에는 로그 외에는 작성을 안하는게 좋은 것 같다.

 

그리고 Destroy(this)를 습관적으로 쓸 때가 있는데, 이러면 게임오브젝트에서 스크립트만 제거되니 주의하자.