Unity3d OnDestroy()语句中的Init事件

Unity3d OnDestroy()语句中的Init事件,unity3d,reload,scene,Unity3d,Reload,Scene,我会在Unity3D语句的OnDestroy()中初始化事件,因为在重新加载场景后,一些被破坏的脚本会获取事件并在游戏对象上抛出MissingReferenceException 以下是我如何声明事件: public delegate void SelectDelegate(); public static event SelectDelegate OnSelected; 我是怎么开始的 void Destroy() { OnSelected = new SelectDelegate

我会在Unity3D语句的OnDestroy()中初始化事件,因为在重新加载场景后,一些被破坏的脚本会获取事件并在游戏对象上抛出MissingReferenceException

以下是我如何声明事件:

 public delegate void SelectDelegate();
public static event SelectDelegate OnSelected;
我是怎么开始的

void Destroy()
{
    OnSelected = new SelectDelegate(OnSelected); //Dont work :'(
}

如何初始化cleanly事件以重新加载场景

好的,我将在这里尝试以下几点:

  • 在处理Unity3D和C#时,我从未像您在Destroy()方法中那样实例化委托。一旦声明,就可以访问它。注册委托时,应为您创建一个实例。见#4
  • OnDestroy()可能不是初始化任何东西的最佳位置,因为它在游戏对象被销毁之前被调用。因此,你初始化的东西很快就会消失
  • 我通常用
    myClassInstance.Onselected+=MyHandlerFunction这样的东西注册代理。这通常在OnEnable()函数中完成。为了清理,我使用
    myClassInstance.Onselected-=MyHandlerFunction删除OnDisable()函数中的委托
  • 在调度事件之前,请始终使用类似于
    if(OnSelected!=null)OnSelected()的内容检查它是否为非null
  • 如果您想避免在加载另一个场景时销毁特定的游戏对象,请使用该类
  • Destroy()不应该是OnDestroy()吗