首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >统一如何使GameObject实例在引用时被销毁?

统一如何使GameObject实例在引用时被销毁?
EN

Stack Overflow用户
提问于 2018-08-18 22:06:32
回答 1查看 544关注 0票数 4

在统一中,GameObject可以被摧毁。

下面是一个场景:

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

从此一切都是幸福的。我们可以用GameObjectB做任何事。

  1. 使用GameObject.Destroy销毁GameObjectB

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

您无法访问任何方法、字段和属性,因为它已被销毁。

问题是他们如何做到的?

如果你仔细考虑的话。

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

我知道Unity有他们的包装层到那些对象。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 01:30:53

这里有个微妙的地方。在您的示例中,如果您检查GameObject B,它将返回等于null。但这是因为Unity已经重写了UnityEngine.Object的相等操作符。如果您实际尝试访问GameObject的任何属性或方法,您将不会得到一个NullReferenceException;您将得到一个来自Unity的异常,表示该对象已被销毁。

换句话说,从.NET/Mono的内存管理角度来看,它仍然存在。因此,要回答您的问题,“如何在C#中实现它”,关键在于等式覆盖。但就连团结公司自己也对这一设计方案有了不同的想法,所以不要在家里尝试。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51914957

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文