(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


DOTWEEN ► You can't add a NULL tween to a Sequenceと警告が出る原因と対処法【Unity】【DOTween】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2022.2.8f1
DOTween Pro 1.0.335

はじめに

今回はUnityで位置や大きさなどのアニメーション、

いわゆるTweenを実装するアセットとしてお馴染みのDOTweenを使っている時に、

https://assetstore.unity.com/packages/slug/32416?aid=1101lGoY


以下のような警告が出る原因と対処法です!

DOTWEEN ► You can't add a NULL tween to a Sequence



原因と対処法

原因は警告に書いてある通りSequenceにnullを追加した事です。


もちろんnullを直接追加したわけではなく、Tweenを実行した結果(返り値)がnullになっていたわけですが、

具体的にどういう場合にnullなるのかというと、自分の場合は

TextMeshProのテキストを1文字ずつアニメーションさせた時に起こりました。

var sequence = DOTween.Sequence();
var animator = new DOTweenTMPAnimator(_text);
    
//1文字ずつアニメーションを設定(iが何番目の文字かのインデックス)
var interval = 0.2f / Mathf.Max(animator.textInfo.characterCount - 1, 1);
for (int i = 0; i < animator.textInfo.characterCount; i++) {
  //Sequenceに各文字ごとのTweenを設定
  sequence.Join(
    DOTween.Sequence()
      .Append(animator.DOFadeChar(i, 0, 0))//最初は透明に
      .AppendInterval(interval * i)//文字ごとにTweenするように間隔をあける
      .Append(animator.DOFadeChar(i, 1, 0))//フェードイン
      .Join(animator.DOScaleChar(i, 1.2f, 0.2f).SetEase(Ease.OutFlash, 2))//ちょっと拡大して戻す
      .Join(animator.DOColorChar(i, Color.yellow, 0.2f * 0.5f).SetLoops(2, LoopType.Yoyo))//黄色にして戻す
  );
}


これがなぜnullになったかというと、テキストに空白が入っていたためで、

空白のように無効な文字はTweenしないようにする事で警告が出る事を防げます。

var sequence = DOTween.Sequence();
var animator = new DOTweenTMPAnimator(_text);
    
//1文字ずつアニメーションを設定(iが何番目の文字かのインデックス)
var interval = 0.2f / Mathf.Max(animator.textInfo.characterCount - 1, 1);
for (int i = 0; i < animator.textInfo.characterCount; i++) {

  //有効じゃない文字はnullになるのでスルー
   if (!animator.textInfo.characterInfo[i].isVisible) {
    continue;
   }

  //Sequenceに各文字ごとのTweenを設定
  sequence.Join(
    DOTween.Sequence()
      .Append(animator.DOFadeChar(i, 0, 0))//最初は透明に
      .AppendInterval(interval * i)//文字ごとにTweenするように間隔をあける
      .Append(animator.DOFadeChar(i, 1, 0))//フェードイン
      .Join(animator.DOScaleChar(i, 1.2f, 0.2f).SetEase(Ease.OutFlash, 2))//ちょっと拡大して戻す
      .Join(animator.DOColorChar(i, Color.yellow, 0.2f * 0.5f).SetLoops(2, LoopType.Yoyo))//黄色にして戻す
  );
}


余談ですが、ChatGPT(GPT-4)に聞いたらそれっぽい全然違う答えが返ってきて、

危うくハマりかけました。(durationが0でもnullにはならない)