在场景改变之前取消订阅事件

时间:2020-12-24 23:51:13

标签: c# unity3d action

我有 2 个场景,我需要在更改第一个场景之前取消订阅事件。

public event Action ObjIndexChanged = () => { };

void HandleCommand(Command command)
    {
        switch (command.name)
        {
            case "LAUNCH":
                GameSettings.ObjIndex = Convert.ToInt32(command.data["structureId"]) - 1;
                SceneManager.LoadScene("Main", LoadSceneMode.Single);
                break;
            case "CHANGE":
                GameSettings.ObjIndex = Convert.ToInt32(command.data["structureId"]) - 1;
                ObjIndexChanged.Invoke();
                break;
            case "EXIT":
                SceneManager.LoadScene("Background", LoadSceneMode.Single);
                break;
            default:
                break;
        }
    }

还有我的游戏管理器:

private void Start()
{
    commandsReceiver.ObjIndexChanged += OnIndexChanged;
}

private void OnIndexChanged()
{
    //GameLogic
}

private void OnDestroy()
{
    commandsReceiver.ObjIndexChanged -= OnIndexChanged;
}
  1. 我加载了 MainScene。动作被调用 1 次
  2. 加载背景场景
  3. 加载 MainScene。动作被调用了 2 次
  4. 加载背景场景
  5. 加载 MainScene。动作被调用了 3 次

我的错误在哪里?谢谢

1 个答案:

答案 0 :(得分:0)

不是在Start函数中订阅事件,而是在
中订阅 Shape
然后不是在启动函数中取消订阅事件,而是在
中订阅 void OnEnable()

像这样:

void OnDisable()