Unity備忘録

UniTask、DOTweenでいい感じにテキスト送りをする

この記事は?

  • 覚書
  • 文字送りしつつ、ボタンクリックしたら最後まで飛ばして、再クリックで完了させる
  • DOTween(Pro)とUniTaskを前提
    • TextならProじゃなくてもできる(はず)
  • ProjectSettings -> ScriptingDefineSymbolsに UNITASK_DOTWEEN_SUPPORT を追加しておく

結論

C#
using System.Threading;
using Cysharp.Threading.Tasks;
using DG.Tweening;
using TMPro;
using UnityEngine.UI; namespace DefaultNamespace
{
    public sealed class TextTweenUtility
    {
        const float defaultInterval = 0.05f;

        public static async UniTask TextTweenAsync(TextMeshProUGUI text, string message, Button next,
            CancellationToken token, float interval = defaultInterval)
        {
            text.text = "";
            var duration = message.Length * interval;
            var t = text.DOText(message, duration);
            await UniTask.WhenAny(t.ToUniTask(cancellationToken: token), next.OnClickAsync(token));
            t.Kill();
            text.text = message;
            await next.OnClickAsync(token);
            text.text = "";
        }
    }
}

に

C#
System.IO.StringReader rs = new System.IO.StringReader(messages);
while (rs.Peek() > -1)
{
    await TextTweenUtility.TextTweenAsync(message, rs.ReadLine(), nextButton, token);
}

rs.Close()

みたいに投げつける