はじめに
今回はText Animator for Unity
というアセットの紹介になります。
ざっくり紹介するとRich Text Tag
をつけるとそれに対応したアニメーションをする感じで、設定自体も簡単なのですぐに習得することができると思います。
概要
まずはText Animator for Unity
とはなんぞやについてですが公式ドキュメントには以下のように記載されています。
“Text Animator for Unity” lets you animate your game texts in a few steps, adding effects to letters, a typewriter and much more.
Documentation | Text Animator for Unity
Text Animator for Unity
は数ステップでテキストにアニメーションをつけたり、文字にエフェクトを追加やタイプライターのような表現をすることができるとのことです。
またText Animator for Unity
はTextMeshPro
を利用する前提なので、必ずインストールしておきましょう。
環境要件
- TextMeshPro
- Unity 2018.4 or above
セットアップ
Text Animatorの実装
Text Animator
の機能を利用するためには以下の操作を行います。
TextMeshPro text
コンポーネントがアタッチされているGameObject
にText Animator
コンポーネントをアタッチ
文字を動的に表示する
タイプライターのように文字が表示されるような表現をしたい場合は先ほどのTextAnimator
に加えてTextAnimatorPlayer
コンポーネントをアタッチする必要があります。
テキストにエフェクトを追加する
TextAnimator
コンポーネントがアタッチされているゲームオブジェクトのTextMeshPro
に対して、以下のようにRich Text
タグを利用することでアニメーションをさせることができます。
I'm <shake>freezing</shake>
エフェクトの種類について
エフェクトには以下の3種類が存在します。
- Behavior effects
- Appearance effects
- Disappearance effects
Behavior effects
Behavior Effects
は文字が出現された後継続的にアニメーションを行うエフェクトの総称です。
適応するには以下のように書きます。
<wiggle>WIGGLE</wiggle>
既存に実装されているタグの一覧は以下の通りで、どんな見た目になるかは以下のページを参照してください。
- Pendulum
- Dangle
- Fade
- Rainbow
- Rotate
- Bounce
- Slide
- Swing
- Wave
- Increase Size
- Shake
- Wave
Appearance effectsとDisappearance effects
Appearance Effects
は画面に文字が出現する際にかかるエフェクトの総称です。
適応するには以下のように書きます。
{vertexp}VERTEXP{/vertexp}
Disappearance effects
は文字が消える際にかかるエフェクトで、Appearance Effects
の逆に動作をします。
適応するには以下のように書きます。
{#size}SIZE{/#size}
ただしDisappearance effects
は後述するTextAnimatorPlayer.StartDisappearingText()
からでないと動作しないはずなので注意してください。(要検証)
実装されているエフェクトは以下の通り。
- Rotating
- Diagonal Expand
- Horizontal Expand
- Vertical Expand
- Offset
- Fading
- Size
- Random Direction
デフォルトで適応されるエフェクトを指定する
Tag
でエフェクトを指定することもできますが、TextAnimator
にはデフォルトでエフェクト適応を設定することができます。
- Default Appearances
- Default Behaviors
- Default Disappearance
エフェクトのパラメーターを設定する
Modifiers
を利用することでエフェクトのパラメーターを設定することができます。
また1
が規定値であることに注意してください。
<wiggle>strong</wiggle> vs <wiggle a=3>3times strong</wiggle>
パラメーターの種類
Behavior effects
- a: amplitude (effect’s strength)
- f: frequency (speed)
- w: wave size (how uniform is the effect applied to letters)
- d: delay
Appearance effectsとDisappearance effects
- a: amplitude (effect’s strength)
- bot: bottom (if it starts from bottom or not), set it to 0 for false, and 1 for true
- x: horizontal direction, set it to -1 (left), 0 (middle) or 1 (right)
- d: duration
文字を動的に表示する(タイプライター)
次にTextAnimatorPlayers
を用いて文字を動的に表示・隠す方法について紹介をしたいと思います。
テキストを表示する
以下の2つの方法があります。
コードを利用(推奨)
TextAnimatorPlayer textAnimatorPlayer = GetComponent<TextAnimatorPlayer>();
textAnimatorPlayer.ShowText("hello, world!");
またTextAnimatorPlayer.StopShowingText
やTextAnimatorPlayer.StartShowingText
を利用することでさらに表現を広げられます。
// タイプライターを始める TextAnimatorPlayer textAnimatorPlayer = GetComponent<TextAnimatorPlayer>(); textAnimatorPlayer.ShowText("hello, world!"); // タイプライターを一時停止 textAnimatorPlayer.StopShowingText(); // 再会 textAnimatorPlayer.StartShowingText(resetVisibleCharacters: false); // リスタート textAnimatorPlayer.StartShowingText(resetVisibleCharacters: true);
Easy Integrationを利用
Text Animator
コンポーネントのUse Easy Integration
をオンにすることで自動でテキストの変更を検知してくれるようになります。
テキストを隠す
テキストを隠すには以下のようなコードを記述します。
TextAnimatorPlayer textAnimatorPlayer = GetComponent<TextAnimatorPlayer>(); textAnimatorPlayer.StartDisappearingText();
TextAnimatorPlayerのインスペクターでの設定
TextAnimatorPlayers
のインスペクターでの設定について細かく知りたい方は以下のドキュメントを読んでほしいのですが、重要そうな箇所だけピックアップして紹介します。
Show and hide letters like a typewriter | Text Animator for Unity
Main Settings
- Use Type Writer : 動的に文字を表示する
Typewriter
- Start Typewriter Mode : タイプライターの表示開始のタイミング
- Reset Typing Speed At Startup : 新しいテキストが表示されるたびにタイプライターの速度を1に戻す
- Can Skip Typewriter : ユーザーがタイプライターをスキップできるようにする(
TextAnimatorPlayer.SkipTypewriter()
) - Hide Appearances On Skip : スキップされたときにエフェクトが再生されないようにする
- Trigger Events On Skip : スキップしたときに残りのイベントをすべてトリガーする
Events
- OnTextShowed : テキストが全て表示された後に呼ばれるイベント
- OnTextDisappeared : スクリプトが最後の文字を隠したときに呼ばれるイベント
- OnTypewriterStart : 最初の文字を表示し始める前に呼ばれるイベント
- OnCharacterVisible(char x) : 一文字が表示されるたびに呼ばれるイベント
Triggering Events
特別なタグを書くことで、タイプライターがそのタグの位置にたどり着くとイベントを発火することができます。
// <?--->と書く
<?eventMessage>
public class Sample : MonoBehaviour { [SerializeField] private TextAnimator textAnimator; private void Awake() { textAnimator.onEvent += OnEvent; } private void OnDestroy() { textAnimator.onEvent -= OnEvent; } private void OnEvent(string message) { switch (message) { case "eventMessage": Debug.Log("eventMessage"); break; case "hoge": break; } } }
この?
の後ろに書いた文字列がOnEvent
の引数に入ってくるというわけですね。