OnDestroy()语句Unity 3D中的Init事件

时间:2013-10-23 16:50:56

标签: unity3d reload scene

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

这里我是如何声明事件的:

 public delegate void SelectDelegate();
public static event SelectDelegate OnSelected;

以及我如何开始

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

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

1 个答案:

答案 0 :(得分:0)

好的,我将在这里尝试一些事情:

  1. 在我与Unity3D和C#的交易中,我从未像在Destroy()方法中那样实例化委托。一旦声明,就可以访问它。注册委托时,应为您创建一个实例。见#4。
  2. OnDestroy()可能不是初始化的最佳位置,因为它在GameObject被销毁之前被调用。因此,无论你初始化什么,都会很快消失。
  3. 我通常会向代表注册myClassInstance.Onselected += MyHandlerFunction;之类的内容。这通常在OnEnable()函数中完成。要清理,我使用myClassInstance.Onselected -= MyHandlerFunction;删除OnDisable()函数中的委托。
  4. 在调度事件之前,请务必使用if( OnSelected != null ) OnSelected();
  5. 之类的内容检查它是否为空
  6. 如果您想在加载其他场景时避免让特定的GameObject被销毁,请使用DontDestroyOnLoad类。
  7. 不应该是Destroy()是OnDestroy()?