0

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

在这里我如何声明事件:

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

以及我如何初始化它

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

我怎样才能干净地初始化事件以重新加载场景

4

1 回答 1

0

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

  1. 在处理 Unity3D 和 C# 时,我从来没有像在 Destroy() 方法中那样实例化委托。一旦声明,它就可以被访问。当您注册委托时,应该为您创建一个实例。见#4。
  2. OnDestroy() 可能不是初始化任何东西的最佳位置,因为它在 GameObject 被销毁之前被调用。因此,无论您初始化什么都将很快消失。
  3. 我通常使用类似myClassInstance.Onselected += MyHandlerFunction;. 这通常在 OnEnable() 函数中完成。为了清理,我在 OnDisable() 函数中使用myClassInstance.Onselected -= MyHandlerFunction;.
  4. 在调度一个事件之前,总是用类似的东西检查它是否为空if( OnSelected != null ) OnSelected();
  5. 如果您想避免在加载另一个场景时破坏特定的游戏对象,请使用DontDestroyOnLoad类。
  6. Destroy() 不应该是 OnDestroy() 吗?
于 2013-10-24T22:33:31.107 回答