この記事でのバージョン
Unity:2021.3.0f1
Dialogue System for Unity:2.2.29
使用アセット
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