티스토리 뷰

※ 금일은 간단한 내용으로 작성합니다.

 

유니티로 작업하다보면 이래저래 Destroy를 사용하는 경우가 종종 발생한다.

다만, Destroy는 잘못 쓰면 콘솔창이 빨갛게 물드는 호러 체험(?)을 할 수도 있다.

오늘은 이것에 대해서 정리해 볼까 한다.

솔직히는 Destroy는 기본적인 기능이라서 이걸 모르긴 힘들지 않나 싶긴 한데...

일단 깜빡하기 쉬워서 정리해 보고자 한다.


Destroy()의 2가지 용법

Destroy는 2가지 사용법이 있다.

  • Destroy(GameObject)
  • Destroy(Component)

둘 다 괄호 안의 대상을 파괴한다는 점에서 사실상 용도는 같다고 볼 수 있다.

다만, '대상 만 파괴한다'는 점 때문에 이런저런 문제의 근원지가 되기가 쉬운 편.

물론, 어지간하면 알고리즘을 잘못 짜서 그런 것이긴 하다만, 그래도 무엇을 주의해야 하는 지 조금만 정리 해 보자.


Destroy가 될 때, 해당 객체가 가진 코루틴이 있다면 오류를 출력한다.

사실, 게임 진행 도중에 뜨는 로그 상의 오류라서 동작에 문제가 생기는 경우는 적다.

그래도 버그는 버그인지라, 신경쓰이는 것이 사실이고, 이것으로 인해서 무슨 문제가 생기는 지도 불분명한 지라 일단 방지하는 것이 좋을 것이다.

간단하게, 코루틴을 사용하는 객체라면 Destroy를 하기 전에 StopCoroutineAll() 한번 만 호출해 주자.

아니면 코루틴의 결과를 대기했다가 Destroy 시키는 방법도 가능하다.

다만, 코루틴은 오브젝트가 비활성화 된 상황에서도 오류를 출력하기 때문에 이 점에도 주의하긴 해야한다.


분명 마지막 줄에서 작동하는 코드임에도 참조 오류가 발생한다.

본인도 원인을 모르겠는 오류 중 하나. 사실상 이번 글을 작성하는 이유 중 하나로,  무슨 이유인지는 몰라도 Destroy를 제일 마지막 줄에서 호출하고 있음에도 '파괴된 오브젝트 접근' 에러가 표시되는 경우가 있다.

사실 이유 없이 이럴 가능성은 낮으니 무슨 문제가 있거나 했을 것이다.

여기서 중요한 것은, '그게 기능 상의 마지막 줄이 맞는가'이다.

몇몇 요인으로 파괴된 이후에도 해당 객체의 연산이 남아있다면 오류가 발생한다. 주의하도록 하자.

[참고로, 이 사항은 주로 컴포넌트를 Destroy 할 때 발생하는 상황이다. 컴포넌트는 어지간하면 enable으로 제어하자.]


솔직히는 Object Pool을 이용하는 경우에는 의외로 Destroy를 쓸 일이 그다지 없다.

[물론, 안 쓰는 것은 아니다. 오히려 1회성 객체에 Object Pool을 쓰긴 어색하기 때문에 그냥 Destroy를 써버리는 게 좋다.]

더군다나 컴포넌트도 보통은 Destroy로 제어하기 보다는 그냥 enable을 건드리는 게 더 낫기도 하고...

 

그러니, 일단 Destroy를 사용할 때에는 'Destroy가 필요한 상황'인지를 확인하고 사용하는 것이 좋을 것이다.

특히 컴포넌트를 Destroy할 경우에는 조금 더 신중하게 선택하도록 하자.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함