在销毁GameObjects时我应该取消字段吗?

mke*_*man 1 c# memory-management unity-game-engine

如果通过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() { }
}
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 5

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

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

注意,当你说destroy时,我假设你用Destroyor DestroyImmediate函数破坏了对象.此外,如果您只是取消订阅您在问题中所做的事件,则无需销毁该对象.您也不需要将其设置为null.