この記事でのバージョン
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にはならない)