Kakoのいろいろやったこと記

主にUnity関連でやったことをかいていきます

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

この記事は?

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

結論

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 = "";
        }
    }
}

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

            rs.Close();

みたいに投げつける