7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】TextAnimatorで会話シーンを彩ろう!

Last updated at Posted at 2025-12-18

g.gif

TextAnimatorは、テキストにアニメーション効果を簡単に追加できるアセットです。
文字を1文字ずつフェードインさせながら表示させたり、ぴょんぴょん跳ねさせたりといった動きを簡単に実装できます
しかもそれを専用のリッチテキストタグを使って制御できるため、マスターデータに挙動を埋め込めるのが最高です

本記事ではV2を使っています

基本的な使い方

TextMeshProのテキストオブジェクトにTextAnimatorコンポーネントを追加します
image.png

追加したいアニメーションのタグをTextMeshProのテキストに追加します
例えば<wave>タグで囲めば波打つようなアニメーション、<shake>タグでぶるぶる震えるアニメーションを文字に追加できます

image.png

普通にリッチテキストのタグを使うような感覚で使えるのでかなり取っつきやすいと思います
タグを重ねれば複数のアニメーションをかけることもできます

g.gif

Typewriterコンポーネントを使えば1文字ずつ表示する、のような実装も簡単です
タグは<>ではなく{}で囲みます

image.png
image.png
g.gif

常時タグ

<>で囲うと常時効果が出るアニメーションを追加できます
可読性とかを考えて使えそうなやつをいくつか紹介します

使用できるタグはこちらから見ることができます
https://docs.febucci.com/text-animator-unity/2.x/effects/built-in-effects-list

<wave>

少しふざけてるとき、酔ってるとき、セリフを少し強調・意味深にさせたりなど、割といろいろなところで使えます

g.gif
g.gif
g.gif

<shake>

恐怖で震えているとき、怒っているとき、セリフを強調したいときに使えます
<shake a=1.5>のように引数を追加することで震えの強さを調節できます

g.gif

g.gif

g.gif

<bounce>

テンションが高いとき、はしゃいでるときに使えます。

g.gif

g.gif

他にも <rainb> <wiggle> など使えるタグがあるので一覧を見てみてください

カスタムイベントタグ

TypeWriterで1文字ずつ表示する場合、特定の文字に到達したときのイベントを取得することができます
タグは<?tagName>の形式です

TypewriterのonMessageを購読することでタグに到達したときのイベントを補足できます

例として、カメラシェイクとユニティちゃんにズームするタグを作ってみます

using System;
using DG.Tweening;
using Febucci.UI;
using Febucci.UI.Core;
using Febucci.UI.Core.Parsing;
using NUnit.Framework.Internal;
using UnityEngine;

public class TextEventHandler : MonoBehaviour
{
    [SerializeField] private TypewriterCore typeWrapper;
    private const float originOrthoSize = 1.40625f;
    
    private void OnEnable()
    {
#if UNITY_EDITOR
        if(!UnityEditor.EditorApplication.isPlaying) return;
#endif
        // OnMessageを購読してカスタムイベントを検知する
        typeWrapper.onMessage.AddListener(OnMessage);
    }

    private void OnMessage(EventMarker eventMarker)
    {
        Debug.Log($"tag:{eventMarker.name}, params:{string.Join(",", eventMarker.parameters)}");
        
        // eventMarker.nameからタグ名を取得できる
        // eventMarker.parametersから引数を取得できる
        switch(eventMarker.name)
        {
            case "cameraShake":
                CameraShake(float.Parse(eventMarker.parameters[0]), float.Parse(eventMarker.parameters[1]));
                break;
            case "zoom":
                Zoom(float.Parse(eventMarker.parameters[0]), float.Parse(eventMarker.parameters[1]));
                break;
        }
    }

    /// <summary>
    /// カメラシェイク(実装かなり適当です)
    /// </summary>
    private void CameraShake(float duration, float strength)
    {
        var camera = Camera.main;
        camera.transform.DOShakePosition(duration, Vector2.one * strength);
    }

    /// <summary>
    /// ズーム(実装かなり適当です)
    /// </summary>
    private void Zoom(float duration, float ratio)
    {
        var t = 1 - Mathf.InverseLerp(1, 2, ratio);
        var y = Mathf.Lerp(-0.721f , 0, t);
        
        ratio = originOrthoSize * (1 / ratio);
        
        var camera = Camera.main;
        camera.transform.DOMoveY(y, duration).SetEase(Ease.OutCubic);
        camera.DOOrthoSize(ratio, duration).SetEase(Ease.OutCubic);
    }

    private void OnDisable()
    {
#if UNITY_EDITOR
        if(!UnityEditor.EditorApplication.isPlaying) return;
#endif
        typeWrapper.onMessage.RemoveListener(OnMessage);
    }
}

<?zoom=秒数,強さ> <?cameraShake=秒数,強さ> の形式でタグを入力します

君が<waitfor=1><?zoom=0.05,1.5><waitfor=0.1><?cameraShake=0.05,0.1>やったんだろ!<waitfor=1>...<?cameraShake=0.05,0.2><size=130%>言え!

迫力が出て良い感じですね。もちろん<size>タグのような、TextMeshPro標準のタグとも併用できます

g.gif

他にもアニメーションを変える、音を鳴らす、など色々できそうです

おわりに

私が使っているTextAnimatorはV2で、2025/12/19現在はV3が最新なのでそっちを使ってください。多分この記事で紹介したことはほぼ変わらずに使えると思います。

このアセットの良いところは、やはりアニメーション効果をテキストデータとしてマスターデータに埋め込めるという点だと思います。引数である程度は動きを調整できるし、セリフをエクセルだったりに打ち込む人が調節しやすくてとても良い。

TextAnimatorには他にも色々な機能があります。複数のタグを1つにまとめるスタイル機能やオリジナル文字アニメーションをするタグを作れたり。是非活用してみてください!メリクリ!

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?