DOTween の警告
ある日のこと。
DOTween を使っていたら、特に動作に問題はないけどなぜか警告を吐いてきました。
DOTWEEN ► This Tween has been killed and is now invalid
「あなたが操作しようとしたトゥイーンはすでに無効になってますよ~」とのこと。
該当のコードはこんな感じ:
if (tweener != null && tweener.IsPlaying()) { tweener.Complete(); }
トゥイーンが再生中だったら即完了にするよっていう処理です。
何の変哲もないコードだと思うけどなぁ……。null チェックもちゃんとしてるし、何がいけないんだろう🤔
調査
似たようなメソッドを並べてみて、片っ端から調べてみました(雑……!)。
if (tweener != null) { Debug.Log(tweener.fullPosition); Debug.Log(tweener.CompletedLoops()); Debug.Log(tweener.Delay()); Debug.Log(tweener.Duration()); Debug.Log(tweener.Elapsed()); Debug.Log(tweener.ElapsedDirectionalPercentage()); Debug.Log(tweener.ElapsedPercentage()); Debug.Log(tweener.IsActive()); Debug.Log(tweener.IsBackwards()); Debug.Log(tweener.IsComplete()); Debug.Log(tweener.IsInitialized()); Debug.Log(tweener.IsPlaying()); Debug.Log(tweener.Loops()); }
上記のコードを実行してみたところ、なんとtweener.IsActive()
のみ警告が発生しないという結果に! どうやら、再生し終わったトゥイーンに対しては、有効かどうか以外を調べるのは非推奨のようです。tweener.IsPlaying()
と書けば一応 false を返してくれるけど、そもそも tweener 自体がもう無効になっているからそんなこと聞いてくるな、ということか。
解決
ということで、以下のように書き換えると、無事警告は出なくなりました。*1
if (tweener != null && tweener.IsActive() && tweener.IsPlaying()) { tweener.Complete(); }
*1:この if 文中の tweener.IsPlaying() が警告されないのは、直前の tweener.IsActive() が false だったらその時点で式の評価が終了するからですね(短絡評価)。