Unity中MonoBehaviour的构造与析构问题

2023/07 20 14:07

以下为示例代码

public class MyClass: MonoBehaviour
{
  MyClass() {}
  ~MyClass() {}

  void Start() {}
  void OnDestroy() {}

  void OnEnable() {}
  void OnDisable() {}
}

坑:
1、MyClass()和~MyClass()的调用并不是在主线程中,不能调用任何UnityAPI
2、~MyClass()的调用时机是不确定的,也就是说,调用了UnityEngine.Object.Destroy(obj) 之后,并不会立即触发 ~MyClass(), 有可能一直不触发
3、若挂载的GameObject状态为Unactive,则调用了UnityEngine.Object.Destroy(obj) 之后,不会触发OnDestroy
4、所以,如果要成对使用,唯一推荐的匹配对为:OnEnale / OnDisale
5、OnEnable 和 OnDisale 可能会被多次触发,所以要小心,又是坑