Unity如何使被引用的GameObject实例销毁?

时间:2018-08-19 06:06:33

标签: c# unity3d

在Unity中,可以销毁GameObject。

这是场景:

  1. 实例化GameObjectA和GameObjectB
  2. 向GameObjectA添加脚本(此脚本可以保存另一个GameObject的引用)
  3. GameObjectA中的脚本找到并保存GameObjectB的引用

从这里一切都快乐。我们可以用GameObjectB做任何事情。

  1. 使用GameObject.Destroy消灭GameObjectB

此处,当我们从GameObjectA的脚本访问GameObjectB时,它将为null。

您无法访问任何方法,字段和属性,因为它们已被破坏。


问题是他们该怎么做?

如果您仔细考虑。

在纯C#对象中,如果有人保留该实例的引用,GC将不会收集。

我知道Unity对那些对象有其包装层。

但是我不知道它是如何工作的?以及如何在C#中实现它?

1 个答案:

答案 0 :(得分:4)

这里有一个微妙之处。在您的示例中,如果选中 GameObject B ,它将返回等于为空。但这是因为Unity重写了UnityEngine.Object的相等运算符。如果您实际上尝试访问GameObject的任何属性或方法,将不会得到NullReferenceException;您会从Unity收到异常消息,说明该对象已被销毁。

换句话说,从.NET / Mono的内存管理角度来看,它仍然存在。因此,要回答您的问题“如何在C#中实现”,诀窍是覆盖等号。但是,即使Unity自己也对该设计选择有第二个想法,所以不要在家中尝试。