在统一中,GameObject可以被摧毁。
下面是一个场景:
从此一切都是幸福的。我们可以用GameObjectB做任何事。
,当我们从GameObjectA的脚本访问GameObjectB时,它将为null。
您无法访问任何方法、字段和属性,因为它已被销毁。
问题是他们如何做到的?
如果你仔细考虑的话。
在纯C#对象中,如果有人保留该实例的引用,GC将不会收集该对象。
我知道Unity有他们的包装层到那些对象。
但我不知道它是怎么工作的?以及如何在C#中实现?
发布于 2018-08-19 01:30:53
这里有个微妙的地方。在您的示例中,如果您检查GameObject B,它将返回等于null。但这是因为Unity已经重写了UnityEngine.Object
的相等操作符。如果您实际尝试访问GameObject
的任何属性或方法,您将不会得到一个NullReferenceException
;您将得到一个来自Unity的异常,表示该对象已被销毁。
换句话说,从.NET/Mono的内存管理角度来看,它仍然存在。因此,要回答您的问题,“如何在C#中实现它”,关键在于等式覆盖。但就连团结公司自己也对这一设计方案有了不同的想法,所以不要在家里尝试。
https://stackoverflow.com/questions/51914957
复制相似问题