タイプライター音をTopDownEngineのSoundManagerで再生する【Dialogue System for Unity】

title ゲーム開発

この記事でのバージョン
Unity:2021.3.0f1
Dialogue System for Unity:2.2.29

使用アセット

Dialogue System for Unity

Dialogue System for Unity

TopDown Engine

TopDown Engine

TypewriterEffectとは

Dialogue Systemのセリフなどの文章を一文字ずつ送ってくれるコンポーネント。

TextMeshProTypewriterEffect(TextMeshPro用),UnityUITypewriterEffect(従来のText用)の2種類ある。


このコンポーネントにはタイプライター音を設定することが出来るが、デフォルトだと指定のAudioSourceで再生することになる。


だが、TopDownEngineを使用している場合はSoundManager経由で管理を統一したいところ…


なのでTopDownEngineに内臓されているSoundManagerで再生するようにする。

やり方

タイプライタースクリプトのサブクラスを作成し、PlayCharacterAudio()をオーバーライドする。

サブクラスやオーバーライドが分からない人向けに言うと、タイプライタースクリプトの機能が使える別のスクリプトとでも思っておけばいい。

作成例:

using MoreMountains.Tools;

namespace PixelCrushers.DialogueSystem
{
    public class MyTypewriterEffect : UnityUITypewriterEffect
    {
        protected override void PlayCharacterAudio()
        {
            // サウンドマネージャーのオプション
            MMSoundManagerPlayOptions options;
            // デフォルトに設定
            options = MMSoundManagerPlayOptions.Default;
            // トラック指定(Sfxトラック)
            options.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx;
            // 再生
            MMSoundManagerSoundPlayEvent.Trigger(audioClip, options);
        }
    }
}

そのままコピペで大丈夫だと思う。
audioClipの箇所は、親クラスの変数をそのまま使用しているので変更しなくていい。


既存のコンポーネント(TypewriterEffectスクリプト)を消去して、作成したスクリプトをコンポーネントに追加する。
(UIの場所:Dialogue panel -> Subtitle Panel -> Subtitle Textのコンポーネント)

コンポーネント

うまく継承出来ていれば、タイプライタースクリプトと同じ表記になる。

あとはオーディオクリップの箇所に鳴らしたいAudioClipをアタッチする。

これで晴れてSoundManagerで再生が出来るようになります。

おわりに

サブクラスやオーバーライドって便利だなぁと思いました。

参考

フォーラム:FMOD Sequencer Command

FMOD Sequencer Command - Pixel Crushers Forum