【发布时间】:2018-12-18 22:31:27
【问题描述】:
所以我在 Unity 中为游戏构建了一个非常基本的事件管理器,并且我将 Actions 的引用保存在这样的字典中:
public void SubscribeToAction(string actionKey, Action<object> listener)
{
Action<object> action;
if(actionList.TryGetValue(actionKey, out action)){
action += listener;
}else{
action += listener;
actionList.Add(actionKey, action);
}
}
但是发生的情况是,即使我在退出场景时取消订阅,我发现正在对旧听众进行调用并且我得到一个空异常:
public void UnSubscribe(string actionKey, Action<object> listener)
{
Action<object> action;
if(actionList.TryGetValue(actionKey, out action)){
action -= listener;
}
}
我找到的唯一解决方案是在退出场景时清除整个字典并在 start() 方法上再次添加订阅。
【问题讨论】:
-
您是否为侦听器使用 lambda 表达式?例如。
SubscribeToAction("blah", (obj) => Debug.Log(obj))?
标签: c# unity3d delegates action