さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【Unity】フェードつき文字送り

packge

github.com

コード

  • 本文用のTextコンポーネントを作成する。
    • 本文用のオブジェクトにFadeInQuadByQuadをアタッチする
  • ルビ用のTextコンポーネントを作成する
    • ルビ用のオブジェクトにRubyTextをアタッチする。
      • RubyTextは↑の本文用オブジェクトを参照しておく。
    • ルビ用のオブジェクトにTypingEffectをアタッチする
  • 二つのオブジェクトのrectは一致させておく。(ルビと本文は親子関係ににしとくのが自然でしょう)
  • コード実行
[SerializeField]
RubyText ruby;

[SerializeField]
Text body;

[SerializeField]
TypingEffect rubyTypingEffect;

[SerializeField]
QuadByQuad bodyTypingEffect;

IEnumerator Start()
{
    var message = "{吾輩:わがはい}は猫である。<color=red>名前はまだ無い</color>。\nどこで生れたかとんと{見<color=red>当:けんとう}がつか</color>ぬ。何でも薄暗いじめじめした所で<color=red>ニャーニャー</color>泣いていた事だけは記憶している。";

    var stringWithRuby = StringWithRuby.Parse(message)
        .FoldTag()
        .WrapWithHyphenation(body, new HyphenationJpns.Ruler())
        .UnfoldTag();
    var typingEffect = new RubyTextTypingEffect(stringWithRuby, ruby, body, rubyTypingEffect, bodyTypingEffect);

    var startedTime = Time.time;
    while (true)
    {
        var elapsedTime = Time.time - startedTime;
        typingEffect.Update(elapsedTime);

        if (elapsedTime > typingEffect.duration)
        {
            break;
        }
        yield return null;
    }
}