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)
如果通过Inspector设置了一个字段,我应该在销毁GameObject时使其无效吗?Unity会自动执行此操作吗?
不,您不必null在销毁之前或之后将Unity对象设置为.Unity的Object有一个==运算符重载.当Object被销毁时,Unity将对象标记为null但对象不是真的null.这是一种实现的机制,以便您检查它是否null与if(unityObject == null).当它被标记为null时,将它再次设置为null是没有意义的.
注意,当你说destroy时,我假设你用Destroyor DestroyImmediate函数破坏了对象.此外,如果您只是取消订阅您在问题中所做的事件,则无需销毁该对象.您也不需要将其设置为null.