首页 > 解决方案 > 销毁游戏对象时我应该取消字段吗?

问题描述

如果一个字段是通过 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() { }
}

标签: c#unity3dmemory-management

解决方案


如果一个字段是通过 Inspector 设置的,我应该在销毁 GameObject 时取消它还是 Unity 会自动这样做?

不,您不必null在销毁它之前或之后将 Unity Object 设置为。Unity 的 Object 有一个==运算符重载。当 Object 被销毁时,Unity 将该对象标记为null但 Object is not real null。这是一种实现的机制,以便您检查它是否nullif(unityObject == null). 当它被标记为 null 时,再次将其设置为 null 是没有意义的。

请注意,当您说销毁时,我假设您正在使用DestroyorDestroyImmediate函数销毁对象。此外,如果您只是像在问题中那样取消订阅某个事件,则无需销毁该对象。您也不需要将其设置为null.


推荐阅读