微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CodeGo.net> Unity如何使GameObject实例被引用时销毁?

在Unity中,可以销毁GameObject.

这是场景:

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

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

>使用GameObject.Destroy销毁GameObjectB

在这里,当我们从GameObjectA的脚本访问GameObjectB时,它将为null.

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

问题是他们该怎么做?

如果您仔细考虑一下.

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

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

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

解决方法:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐