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