-
신기한 Unity Engine의 Destroy프로그래밍/의문 2020. 12. 13. 01:13반응형
Unity에서 어떤 GameObject를 Destroy 되면,
그 GameObject를 참조하는 다른 곳에서도 null체크 할 수 있더라.
상식적으로는 댕글링 포인터가 되어야 하는데 말이다.public class A : MonoBehaviour { GameObject monster; // B의 monster와 같은 인스턴스 // ... void Test() { Destroy(monster); } } public class B : MonoBehaviour { GameObject monster; // A의 monster와 같은 인스턴스 // ... void Test() { if (monster == null) {// A에서 Destroy를 했는데 B에서 null체크가 됨! } } }
사실 이는 일종의 트릭이었는데, Destroy를 한다고 해서 GameObject를 곧바로 제거하는 게 아니다.
GameObject 내부에 일종의 Destroy Flag를 설정하고, null체크 처럼 사용할 수 있도록 Object의 == operator를 재정의 하고 있었던 것이다.
마치 그냥 null체크 하는 것처럼 쓸 수 있게!++
나는 유니티 엔진이 리플렉션의 힘을 이용해 GameObject를 멤버로 가지는 모든 인스턴스에 접근해 Destroy 때 해당 포인터와 같은 GameObject 멤버를 찾아 null로 변경을 하는 건가? GameObject가 많아지면 비용이 엄청 커지겠는걸! 이라고 잠깐 생각했었다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
Flatbuffers로 만들어진 바이너리 식별 방법 (10) 2021.05.10 깃허브(Github) 계정으로 연동해 만든 깃랩(Gitlab) 계정으로 인증하기. (0) 2021.04.03 [UE4]월드에 Player Start Actor가 있는데 Player Character가 스폰되지 않음 (0) 2020.09.15 Json의 NewLine은 \n (0) 2020.08.15 왜 MTU 사이즈는 1500 bytes 인가? (0) 2020.08.05