如果通过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() { }
}
答案 0 :(得分:5)
如果通过检查器设置了一个字段,销毁时我应该将其无效 GameObject或Unity会自动执行此操作吗?
否,您不必在销毁Unity对象之前或之后将其设置为null
。 Unity的对象有一个==
运算符重载。销毁对象后,Unity会将对象标记为null
,但实际上不是null
。这是一种实现的机制,因此您可以使用null
来检查它是否为if(unityObject == null)
。当将其标记为null时,将其再次设置为null没有任何意义。
请注意,当您说销毁时,我假设您正在使用Destroy
或DestroyImmediate
函数销毁对象。同样,如果您只是取消订阅某个事件,就像您在问题中所做的那样,则无需销毁该对象。您也不需要将其设置为null
。