gpt4 book ai didi

c# - Unity如何使GameObject实例在被引用时被销毁?

转载 作者:行者123 更新时间:2023-12-02 02:52:21 25 4
gpt4 key购买 nike

在Unity中,GameObject可以被销毁。

这是场景:

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

从这里开始一切都很开心。我们可以用 GameObjectB 做任何事情。

  • 使用 GameObject.Destroy 销毁 GameObjectB
  • 此处当我们从 GameObjectA 的脚本访问 GameObjectB 时,它将为 null。

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

    <小时/>

    问题是他们如何做到这一点?

    如果你仔细想想。

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

    我知道 Unity 有这些对象的包装层。

    但我想知道它是如何工作的?以及如何用C#实现它?

    最佳答案

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

    也就是说,从.NET/Mono的内存管理的角度来看,它仍然存在。因此,要回答您的问题“如何在 C# 中实现它”,技巧就是相等覆盖。但即使是 Unity 本身也对这种设计选择进行了重新考虑,所以不要在家尝试。

    关于c# - Unity如何使GameObject实例在被引用时被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914957/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com