UniRXでuGUIのテキストをアニメーションさせる
UniRXの勉強も兼ねて小ネタ的なやつ。
いわゆるノベルゲーのこういうやつ
これをuGUIのTextがついてるオブジェクトにペタっと貼ると動きます。
UniRXをインポートしていることが前提です
using UnityEngine; using System.Collections; using UniRx; [RequireComponent(typeof(UnityEngine.UI.Text))] public class TextAnimation : MonoBehaviour { [SerializeField] private float speed; void Start() { var current = GetComponent<UnityEngine.UI.Text>(); string rawText = current.text; current.text = ""; Observable.Interval(System.TimeSpan.FromSeconds(speed)). // speed秒置きに Take(rawText.Length). // 元の文字列の長さ分実行され Select(_ => 1). // 実行ごとに都度1を取り出し Scan((acc, currentLength) => acc + currentLength). // 現在の実行回数を計算する SubscribeToText(current, length => rawText.Substring(0, length)); // rawから0~length文字取り出してcurrentに投げる } }
実際使うときはボタンとかキーとか外部のアクションで文章を途中で止めたいとかありそう。 購読を一回止めて、再度実行というのがまだわかってないので次にでも書きます。