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()みたいに投げつける