몬스터 오브젝트를 게임 내에서 제거하면(Destroy함수) 일련의 처리가 필요해서 OnDestroy 안에 코드를 작성했는데 이미 없어진 객체에 액세스 또는 참조하는 에러를 경험했다.
또 에디터의 PlayMode가 종료될 때 역시 Scene이 닫히면서 OnDestroy가 호출되는데, 씬 내에서 오브젝트가 제거되는 순서 역시 정해져있지 않기 때문에 에디터 내에서도 에러를 볼 수 있었다.
후자의 경우 오브젝트들이 제거되는 순서를 따로 명시해주는 걸로 해결할 수 있다.
전자의 경우 OnDestroy 안에 처리 내용을 작성하지 않고, 별도의 함수를 만들어 Destroy함수를 호출하기 전에 일련의 처리를 하고 Destroy를 호출했다.
//캐릭터를 죽인다.
void Kill()
{
//처리할 내용....
Destroy(this.gameobject);
}
이렇게 말이다. 가급적이면 OnDestroy 안에는 로그 외에는 작성을 안하는게 좋은 것 같다.
그리고 Destroy(this)를 습관적으로 쓸 때가 있는데, 이러면 게임오브젝트에서 스크립트만 제거되니 주의하자.
'유니티 > 버그일지' 카테고리의 다른 글
[Unity] Collider의 Trigger 관련 버그 (0) | 2020.05.18 |
---|---|
[C#][Unity]List에서 원소 제거시 주의할 점 (0) | 2020.04.07 |
Trigger가 발동되지 않는 경우 (0) | 2020.03.27 |
[Unity]에디터 확장한 프로젝트가 빌드 실패할 때 (2) | 2020.02.26 |
[Unity]error: 프리팹의 parent 변경할 때 실수 조심 (4) | 2019.10.20 |