【Unity】VisualScriptingとTextMeshProを使用してメッセージの文字送りを実現する

概要

toshizabeth.hatenablog.com

こちらの続き

www.youtube.com

こちらの内容から。
メッセージのテキスト送りについての手順について

f:id:toshizabeth:20210921095340g:plain

はじめに

TextMeshProには設定したテキストの「表示テキスト数」が指定できる

private TextMeshPro _text;

private void Update()
{
     // 最大可視化文字を指定。ここをアニメーションで増やしていくと表示文字が増えていく演出になる
     _text.maxVisibleCharacters = 1; 
}

この maxVisibleCharacters を VisualScripting上から操作します

Timerユニットを取り付ける

「○秒に○文字出す」という条件にするために、Timerユニットが使用できます

docs.unity3d.com

これのStartを SetText ユニットに取り付けます

f:id:toshizabeth:20210923132617p:plain

TimerUnit

機能名 説明
Started StartがOnになったら呼び出される
Tick タイマーがアクティブの間毎フレーム呼び出される
Completed 完了したら呼び出される
Elapsed タイマーが開始されてからの時間を返す
Elapsed(%) タイマーが開始されてからの時間を0〜1の範囲で返す
Remaining 残り時間を返す
Remaining(%) 残り時間を0〜1の範囲で返す
Duration カウント時間
UnScaled チェックを入れるとタイムスケールの無視

テキストが設定された瞬間の表示文字は0
「10秒で40文字出す」という条件を追加します

Timerから先は以下

f:id:toshizabeth:20210923141312p:plain

「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文字出す」が達成できます