Text Animator for Unity


投稿日:2023年3月30日 | 最終更新日:2024年11月11日

Text Animator for Unityとは

Text Animator for Unityは、文字表示にアニメーション演出を制御するAsset Storeの有料プラグインです。
詳しくは、Text Animator for Unityの公式サイトや、アセットストアをチェックしてください。

宴の「Text Animator for Unity」対応プラグインのダウンロード

宴でTextAnimatorを使用するには、拡張プラグインが必要です。
「Text Animator for Unity」のVersionによって使用するプラグインが違うので、ご注意ください。
(ファイルのダウンロード後に、拡張子が . gzになっている場合は、.unitypackageに変えてからプロジェクトに適用してください)
パッケージを適用すると、「UtageForTextAnimator」というフォルダが作成されます。

「Text Animator for Unity」Ver2以降

Text Animator Ver2を使用する場合は以下のリンクからDLしてください。
https://madnesslabo.net/UtageSample/UtageForTextAnimatorVer2.3.unitypackage

「Text Animator for Unity」Ver1

Text Animator Ver1を使用する場合は以下のリンクからDLしてください。
https://madnesslabo.net/UtageSample/UtageForTextAnimator.unitypackage

サンプル

UtageForTextAnimator/Sampleフォルダ以下にサンプルシーンとサンプルシナリオが入っています。
実行する場合、宴のSampleフォルダを削除していない状態で試してください。

宴の「Text Animator for Unity」対応プラグインの使い方

UtageForTextAnimatorをAddComponent

AdvEngineオブジェクトのUtageForTextMeshProコンポーネントをRemoveして、代わりにUtageForTextAnimatorをAddComponentしてください。

TextMeshProNovelTextをNovelTextForTextAnimatorに入れ替え

さらに、各メッセージウィンドなどのテキスト表示オブジェクトで
TextMeshProNovelTextコンポーネントをRemoveComponentして、代わりにNovelTextForTextAnimatorをAddComponentして、RubyPrefabにルビ用のプレハブを設定してください。
Text Animator Ver2.2からは、Rootにメッセージウィンドウの表示のルートオブジェクト(RootChildren)を設定してください。

MessageWindowオブジェクトのAdvUguiMessageWindowTMPコンポーネントの「TextPro」に、MessegeTextオブジェクトを再設定してください。

Text Animator for Unityの設定

NovelTextForTextAnimatorを設定したテキストオブジェクトに、「Text Animator for Unity」のコンポーネントを設定します。
Text Animator for Unity自体が、Version2とVersion1で違うので、バージョンに合わせた設定が必要です。

Version2

https://madnesslabo.net/UtageSample/UtageForTextAnimatorVer2.3.unitypackageを使用してください。
(Ver2.1、Ver2.2はページ切り替え時に文字化けするなどの不具合があります)

「Text Animator for Unity」のTextAnimator-TextMeshProコンポーネントをAddComponentしてください。

  • 「Animation Loop」を「Late Update」に設定
  • 「DefaultTags」の「Appearances」と「DisAppearances」のサイズを0に設定

さらに、Typewriter-ByCharacterコンポーネントをAddComponentしてください。

  • Main Settingsの「Use Type Writer」をオンに設定
  • TypewriterのStart Typewriter Modeを「From Script Only」に設定

Version1

「Text Animator for Unity」のTextAnimatorコンポーネントをAddComponentしてください。
「UseEasyIntergration」はオフ。(TextAnimatorPlayerは使わないのでもし、AddしていたらRemoveしてください)
「Default Appearances」のサイズ0すると、表示エフェクトのデフォルト指定を削除できます。

利用可能タグ

利用可能になるタグは、2023/3/30時点の「Text Animator for Unity」のビルトインタグに対応しています。

Behaviors

文字のアニメーションタグです。基本的にはループアニメーションが続きます。
パラメーター指定等の詳細は、「Text Animator for Unity」のドキュメントを確認してください

タグ サンプル
pend <pend>text</pend>
dangle <dangle>text</dangle>
fade <fade>text</fade>
rainb <rainb>text</rainb>
rot <rot>text</rot>
bounce <bounce>text</bounce>
slide <slide>text</slide>
swing <swing>text</swing>
wave <wave>text</wave>
incr <incr>text</incr>
shake <shake>text</shake>
wiggle <wiggle>text</wiggle>

Appearances

文字を表示しはじめるときに一度だけ再生されるアニメーションです。
タグを囲む記号が、<>ではなく{}な点に注意してください。

タグ サンプル
diagexp {diagexp}text{/diagexp}
horiexp {horiexp}text{/horiexp}
vertexp {vertexp}text{/vertexp}
diagexp {diagexp}text{/diagexp}
offset {offset}text{/offset}
fade {fade}text{/fade}
size {size}text{/size}
rdir {rdir}text{/rdir}

パラメーター指定

<offset a=180 d=5>text</offset>
のようにして、アニメーションの時間や大きさなどのパラメーターを指定することができます。
詳細は「Text Animator for Unity」のドキュメントを確認してください

TextAnimator拡張タグ

TextAnimatorで自作の拡張タグを追加して使用する場合は、追加したタグ名を「UtageForTextAnimator」コンポーネントの
「New Behavior Tags」または「New Appearances Tags」、「New Events Tags」に設定してください。
*注) TextAnimatorの仕様かもしれませんが、BehaviorとAppearancesの場合はタグ名を小文字のみにする必要がある模様です。

自作のタグの追加の方法は、TextAnimatorのドキュメントを確認してください。
https://docs.febucci.com/text-animator-unity/effects/create-your-own-effects

このように、独自で定義しタグを使用できるようになります。

Test Custom <?myevent=arg0,arg1> Event tag
Test Custom {myappearance} Appearances {/myappearance} tag.
Test Custom <mybehavior>  Behavior </mybehavior> tag.

イベントタグ

上記の「New Events Tags」を使うことで宴上でもTextAnimatorのイベントタグも使用可能になります。
これは、テキストの任意の位置にUnity上にメッセージを送信機能を埋め込むというものです。

書き方のサンプル

イベントタグは<? >で囲う必要があります

Test Custom <?myevent> Event tag
Test Custom <?myevent=arg0,arg1> Event tag

引数を持たせたい場合は、<?イベントタグ名=引数1>と記述し、複数設定したい場合はカンマ区切りで<?イベントタグ名=引数1,引数2>と記述します。

イベントタグをプログラムで扱うサンプル

文字の表示位置がイベントタグの位置に来た時点で、TypeWriteコンポーネントのOnMessageに設定したプログラムが呼ばれます。
引数は、EventMarkerのparamatersに文字列として設定されていますので、これを利用するプログラムを各自で拡張する形になります。

    public class SampleTextAnimatorEvent : MonoBehaviour
    {
        [SerializeField] TypewriterCore typewriter;
        void Awake()
        {
            typewriter.onMessage.AddListener(OnMessage);
        }

        void OnDestroy()
        {
            if (typewriter) typewriter.onMessage.RemoveListener(OnMessage);
        }

        void OnMessage(EventMarker eventData)
        {
            string msg = $"frame={Time.frameCount} event Name = {eventData.name}, index = {eventData.index}\n parameters = {string.Join(", ",eventData.parameters)}";
            Debug.LogWarning(msg);
        }
    }

イベントタグと宴の相性問題

基本的には、宴はテキストとその他のコマンドを独立させているので、テキストの途中になんらかの処理をするようには設計されていません。
テキスト表示途中になにかしたい場合は、PagaCtrlとWaitコマンドやSendMessage系のコマンドを組み合わせて使うのが基本です。
ただ、ローカライズに問題がある場合や簡易易的な処理だけしたい場合があるときは、イベントタグを使うほうが楽になるケースがあるかもしれません。

intervalタグとの併用問題
intervalタグと合わせて使用することで、時間差処理もできるのですが
両方のタグの間にスペースなど、一文字以上入れないとタグの実行順が正確になりません。
<interval=1> <?event=arg>
<?event=arg> <interval=1>
スペースなしで、連続して書いた場合はインターバルの開始とイベントタグの開始が同時に発生します。
そのためインターバルの終了を待たずにイベントが発生してしましますので、注意してください。

waitforなどのActionタグは使用不可能

TextAnimatorの、waitfor、waitinput、speedなどのActionタグは使用できません。
宴のintervalタグや、PageCtrlspeedタグなどを使用してください。

改ページ時のちらつき対策

改ページのときに、次のページでルビやアンダーラインなどを使っていると、改ページ時に一瞬全文表示されたり、文字化けしたりして画面がちらついてしまう現象があります。
日本語などのためにフォールバックフォントを使っていると特に発生しやすいようです。
(TextAnimator側に確認しましたが、根本的な対策は難しいようです)

回避的な処置として、改ページ直後1フレームはTextを透明にするという処理を追加しました。

名前 内容
FallbackFontBugFix 改ページのちらつきバグを抑制するために、改ページ直後1フレームの透明処理を有効にするかどうか
Canvas Group 1フレームだけ透明にする対象。任意のCanvasGroupを設定。
MessageText自体にCanvas GroupをAddComponentして設定する と、テキストと改ページアイコンのみ透明になる
FallbackFontBugFixSkipping スキップ中にも1フレームだけ透明にする処理を有効にするか。
スキップ中に単純に1フレーム透明にするとテキストが全く表示されないままになってしまうため調整が必要。
Disable:スキップ中は透明にしない
HideSkipWaitTime:AdvPageのSkip Message TypeがWait Skip Speedにになっているときは1フレーム透明にする。

注意点

また、下記の通りいくつか注意点があります。

  • 宴のLegacyテキスト(NovelText)には非対応。
    宴のLegacyテキスト処理も、テキストの頂点等を操作しているため、TextAnimatorと機能が衝突してしまうため非対応です。

  • 起動後初回のAppearances系のタグがうまく動作していない。(TextAnimatorのバージョンによる?)
    サンプルシナリオで、起動後に「ArgTest」の選択肢を最初に選ぶと違いがはっきりとわかると思うのですが、エフェクトの動作がずれてしまっています。
    TextAnimatorのバグか、もしくはプログラム上でなんらかの初期化が必要なのかもしれないのですが、ちょっとどうすればいいのかわかりませんでした。(解決法がわかりそうだったら教えてください)
    同じシナリオであっても、起動直後でなければ問題ないようです。

  • TextMeshProの取り消し線や下線タグを使うと、まだテキストが非表示の部分であっても最初から線が表示されている。
    TextAnimatorの不具合なのか未対応なのかわかりませんが、TextAnimatorのタグを使っていなくてもそのように動作してしまいます。

  • 宴のルビや傍点は動作はするが、エフェクトに合わせて動くわけではない。
    文字のエフェクトの動きに合わせてルビなどが一緒に動くわけではありません。