在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自己也对设计选择有第二个想法,所以不要在家中尝试.
原文地址:https://codeday.me/bug/20191025/1925304.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。