Open1

Unity(C#)でActionの多重登録を防ぐには...

inolalalainolalala

背景

  • Actionを組み込んだタイマーに登録した処理がバグった
  • 初回は問題ないが、2回目以降に不具合が発生。
  • 想定されるIndexのインクリメントが2倍になってた。
  • 原因はイベントの多重登録。
  • GetInvocationList()で登録イベント数を調べたら判明。
  • 結局、イベント登録前に毎回消してから登録するような方法をとった。
  • なんか、このやり方だといつか不都合でそうな予感がして気持ち悪い。
  • そもそもこういう問題が起きないような実装を考えたいところ。

対処法

    public void StartAnimation()
    {
        timer.ClearAllEvent(); //<- 登録前に必ず消すようにした。
        timer.OnTimerWrap += onTimewrapHandler;
        timer.OnTimerFinished += onTimeFinishHandler;
        // 以下略
    }
   
   ~~~~~~~~~~
    
    public void ClearAllEvent()
    {
        OnTimerWrap = null;
        OnTimerFinished = null;
    }