[UNITY]2DRPG開発日誌 #58 Fungusでラブデリック語を実装する方法

Fungusについての基礎知識はこちらの記事を参照してください。

「そもそもラブデリック語とは?」や「UNITYで(Fungusを使わずに)ラブデリック語を実装する方法」についてはこちらの記事で解説しています。

Fungusの音声再生

はじめに、「moon」と比べるとFungusのデフォルト文字表示速度は速めなので、SayDialog内のWriterコンポーネントのWritingSpeedを18程度に変更しておきましょう。

続いて、Fungusではデフォルトで文字送りの際にBeep音が流れる仕様ですが、これはSayDialog内のWriterAudioコンポーネントで制御されている機能です。

ここのAudioModeを「Beeps」にして、BeepSoundsリストに好きなだけ音を登録すればとりあえずラブデリック語は完成します。超簡単ですね。

ただし、このままでは「同じセリフを喋った時は同じ音を再生する(ランダムテーブルの固定)」という機能にはなりません。

完璧な「ラブデリック語」にするには少々手順が多いですが、難しくはありません。

事前準備

はじめに、特定のコマンドが開始されたことを検知するため、Flowchartオブジェクト内に適当な名前(私は FlowchartSignals という名前にしました)のスクリプトを作って、中身をこう書きます。

次に、Flowchartオブジェクト直下にラブデリック語を使用したいSayDialogオブジェクトを格納します

これは先ほどのスクリプトから子オブジェクトとして検索するためなので、もっと上手な方法があれば適宜工夫してください。

アセットの中身の書き換えかた

ProjectウインドウからFungus -> Scripts -> Components フォルダにある WriterAudio.csを探して、中身を編集します。

はじめに、固定パターンのランダムテーブルを使用するため、神ブログ(:3[kanのメモ帳]で公開されている固定パターンランダムテーブルクラスをまるごとコピペします。スクリプトの上のほうにでも置いておきましょう。

続いて、BeepSounds音声を再生しているこの箇所を、

このように編集します。

次に、Fungusの初期設定であるフェードイン/フェードアウト機能を無効化する必要がありますので、同スクリプト内の203行目あたりにある

これを

こうします。

このフェードイン/アウト無効化について、最初は「ラブデリック語再生時のみ無効化する」という実装を考えていて、それなら同スクリプト最下にある「public void OnAllWordsWritten()」メソッドでテキスト終了を検知すればOK…と思っていたのですが、
そうするとテキスト送りをスキップしたときにテキスト終了が呼ばれないなど予期せぬバグの原因となるので、特別な事情がなければフェードイン/アウト機能自体を無効化するほうがよいと思います。

 

以上で完成です!

動画でも解説しました。