【Unity】VisualScriptingとTextMeshProを使用してメッセージの文字送りを実現する
概要
こちらの続き
こちらの内容から。
メッセージのテキスト送りについての手順について
はじめに
TextMeshProには設定したテキストの「表示テキスト数」が指定できる
private TextMeshPro _text; private void Update() { // 最大可視化文字を指定。ここをアニメーションで増やしていくと表示文字が増えていく演出になる _text.maxVisibleCharacters = 1; }
この maxVisibleCharacters
を VisualScripting上から操作します
Timerユニットを取り付ける
「○秒に○文字出す」という条件にするために、Timerユニットが使用できます
これのStartを SetText ユニットに取り付けます
TimerUnit
機能名 | 説明 |
---|---|
Started | StartがOnになったら呼び出される |
Tick | タイマーがアクティブの間毎フレーム呼び出される |
Completed | 完了したら呼び出される |
Elapsed | タイマーが開始されてからの時間を返す |
Elapsed(%) | タイマーが開始されてからの時間を0〜1の範囲で返す |
Remaining | 残り時間を返す |
Remaining(%) | 残り時間を0〜1の範囲で返す |
Duration | カウント時間 |
UnScaled | チェックを入れるとタイムスケールの無視 |
テキストが設定された瞬間の表示文字は0
「10秒で40文字出す」という条件を追加します
Timerから先は以下
「10秒カウント」したいのでTimerのDurationには10を入れる
まず、Timerの開始時に表示テキスト数を0にしたいので、StartedからSetMaxVisibleCharactersユニットを付ける。
SetMaxVisibleCharactersユニットが
_text.maxVisibleCharacters = 1;
maxVisibleCharactersへの設定の役目をしてくれるわけですね
表示数は0としたいので値は0。
更新のたびに SetMaxVisibleCharacters
を呼び出してもらうようにもう一つ配置して Tick
と結びつける。
表示数の指定は残り時間を返す Elapsed %
を使用。
Elapsed %
はTimerの残り秒数に応じて 0〜1 の値を返してくれるので、それをMultiplyユニットと結びつけることで Elapsed% x 40 = 表示文字数
を実現しています
40は「10秒で40文字出す」の40。
0秒目のときは0なので 0 x 40 = 0 文字表示
1秒目のときは0.1なので 0.1 x 40 = 4 文字表示
10秒目のときは 1 なので 1 x 40 = 40 文字表示
という扱いになります
これをSetMaxVisibleCharactersユニットの文字数に指定してあげることで「10秒で40文字出す」が達成できます