c# - 销毁游戏对象时我应该取消字段吗?
问题描述
如果一个字段是通过 Inspector 设置的,我应该在销毁 GameObject 时取消它还是 Unity 会自动这样做?
public class TestClass : MonoBehaviour
{
public Image Icon;
public Button CloseButton;
private void Start()
{
Icon.color = Color.black;
CloseButton.onClick.AddListener( MyButtonListener );
}
private void OnDestroy()
{
CloseButton.onClick.RemoveListener( MyButtonListener );
//DO I NEED THIS?
Icon = null;
CloseButton = null;
}
private void MyButtonListener() { }
}
解决方案
如果一个字段是通过 Inspector 设置的,我应该在销毁 GameObject 时取消它还是 Unity 会自动这样做?
不,您不必null
在销毁它之前或之后将 Unity Object 设置为。Unity 的 Object 有一个==
运算符重载。当 Object 被销毁时,Unity 将该对象标记为null
但 Object is not real null
。这是一种实现的机制,以便您检查它是否null
与if(unityObject == null)
. 当它被标记为 null 时,再次将其设置为 null 是没有意义的。
请注意,当您说销毁时,我假设您正在使用Destroy
orDestroyImmediate
函数销毁对象。此外,如果您只是像在问题中那样取消订阅某个事件,则无需销毁该对象。您也不需要将其设置为null
.
推荐阅读
- python - 在 Azure DevOps Pipeline 中找不到 Pytest
- eclipse - 无法访问“kotlin.String”的超类型“java.io.Serializable”。检查您的模块类路径是否存在缺失或冲突的依赖项
- reactjs - 反应传单。映射 CircleMarker 数组进入无限循环
- javascript - 谷歌分析没有发送带有浏览量点击的自定义维度
- python - 问题嵌套近似搜索算法
- stata - Stata 16 - 使用 if 语句创建标量变量
- git - 使用特定的状态行/行号配置 vimdiff 拆分
- angular - 在 Angular 应用程序中将运算符动态添加到可观察的 Rxjs
- stackexchange-api - Stack Exchange API 以获取影响/达到的人数
- android - 应用内计费:如何检索适用于每个订单的税款(增值税、游戏商店佣金等)?