在Unity中,可以销毁GameObject。
这是场景:
从这里一切都快乐。我们可以用GameObjectB做任何事情。
此处,当我们从GameObjectA的脚本访问GameObjectB时,它将为null。
您无法访问任何方法,字段和属性,因为它们已被破坏。
问题是他们该怎么做?
如果您仔细考虑。
在纯C#对象中,如果有人保留该实例的引用,GC将不会收集。
我知道Unity对那些对象有其包装层。
但是我不知道它是如何工作的?以及如何在C#中实现它?
答案 0 :(得分:4)
这里有一个微妙之处。在您的示例中,如果选中 GameObject B ,它将返回等于为空。但这是因为Unity重写了UnityEngine.Object
的相等运算符。如果您实际上尝试访问GameObject
的任何属性或方法,将不会得到NullReferenceException
;您会从Unity收到异常消息,说明该对象已被销毁。
换句话说,从.NET / Mono的内存管理角度来看,它仍然存在。因此,要回答您的问题“如何在C#中实现”,诀窍是覆盖等号。但是,即使Unity自己也对该设计选择有第二个想法,所以不要在家中尝试。