この記事は?
- 覚書
- 文字送りしつつ、ボタンクリックしたら最後まで飛ばして、再クリックで完了させる
- 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();
みたいに投げつける