0

我有 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. 加载主场景。动作被调用了 2 次
  4. 加载背景场景
  5. 加载主场景。动作被调用 3 次

我的错误在哪里?谢谢

4

1 回答 1

0

而不是在 Start 函数中
void OnEnable()
订阅事件,而是订阅 Then 而不是在 Start 函数中取消订阅事件,订阅
void OnDisable()

像这样 :

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

void OnDisable()
{
   commandsReceiver.ObjIndexChanged -= OnIndexChanged;
}
于 2020-12-25T17:03:51.280 回答