销毁GameObjects时是否应该使字段无效?

时间:2018-06-28 12:20:49

标签: c# unity3d memory-management

如果通过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() { }
}

1 个答案:

答案 0 :(得分:5)

  

如果通过检查器设置了一个字段,销毁时我应该将其无效   GameObject或Unity会自动执行此操作吗?

否,您不必在销毁Unity对象之前或之后将其设置为null。 Unity的对象有一个==运算符重载。销毁对象后,Unity会将对象标记为null,但实际上不是null。这是一种实现的机制,因此您可以使用null来检查它是否为if(unityObject == null)。当将其标记为null时,将其再次设置为null没有任何意义。

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