目次
はじめに
個人の備忘録としてまとめています。誤った情報がある場合があります。
コメントにてご指摘のほどお願いいたします。
本記事は公式ドキュメントを参考にしています。
今回はUEに用意されているダイアログアセットの使い方について解説しています。
環境
UE5.3.2
TPSample
解説
使いどころについて
ダイアログボイスやダイアログウェーブを使うことで、人間関係を意識された会話システムの構築を行うことができます。
たとえば、同じ『こんにちは』という字幕でも、相手によってその音声を個別に設定しておきたいといったニーズがあると思います。
他にも親密度が上がったら同じセリフでも印象が異なる音声に差し替えたりなどにも使えそうですね。
こういった実装をする場合、大規模な分岐のシステムを構築する必要がありますが、この機能を利用することでアセットベースで指定することができます。
この記事では話かけるモノによって同じセリフでも音声データを変更する実装を実際に試してみたいと思います。
解説 -事前準備-
➀シンプルな会話システムの構築
このシステムを試すにあたりシンプルな会話システムを作成します。
ThirdPersonCharacterに以下のようなノードを組みます。
(デバッグ表示の設定を有効にしています)
②会話相手の作成
アクタを継承したBPを作成し、Coneメッシュコンポーネントを追加しました。
名前はB_Cone_Aとしました。
コリジョンプリセットはPawnとしておきます。
作成した会話アクタの近くでFを押すとコリジョンが反応して色が緑になっていれば成功です。
解説 -ダイアログボイス-
➀ダイアログボイスの作成
名前は頭文字をとってDV_Playerとしました。
ダイアログボイスアセットはそのキャラクターの性別や単数/複数について設定できます。そのため、1キャラクター1アセットと、対応させて用意するのがおすすめです。
同様にDV_Cone_A, DV_Cone_B も作成しておきます。
②ダイアログボイスアセットのキャラクターに割り当て
B_Cone_A, B_Cone_B, BP_ThirdPersonCharacterにDialogueVoice型のDV_Selfという変数を用意します。
BP_ThirdPersonCharacterにはDV_Player
B_Cone_AにはDV_Cone_A といったように割り当てていきます。
③会話時に相手のダイアログボイスを取得する仕組みの作成
手法は何でもいいですが、今回はインターフェースを利用した方法で実装します。
ブループリントインターフェース BI_Talkableを作成します。
インターフェース内にGetDialogueVoiceという関数を作成しアウトプットにDialogueVoice型の変数を返すようにします。
B_Cone_A, B_Cone_B にこのインターフェースを実装し、関数GetDialogueVoiceに自身のDialogueVoice、DV_Selfを返すようにします。
BP_ThirdPersonCharacterに戻り、以下のようにノードを組みます。
これにより、入力後にインターフェースを中継して当たった相手のDialogueVoiceを取得できるようになりました。
解説 -ダイアログウェーブ-
➀ダイアログウェーブを作成
名前はDW_Helloとしました。
ダイアログウェーブアセットは同一字幕で、ダイアログボイスの組み合わせによりどの音声を指定するかを設定できるアセットです。
②ダイアログウェーブの編集
ダイアログコンテキスト内でSpeakerにDV_Playerを指定します。
ターゲットにはDV_Cone_Aを指定します。
ダイアログコンテクストを追加 を押してPlayerからDV_Cone_Bに対しての条件も追加します。
左の▽からその条件の時のSoundWaveを指定することができます。
これでConeAに対してHelloという場合の音源は~
ConeBに対してHelloという場合の音源は~
という条件を設定できるようになります。
ターゲットを複数にすることも可能で、同一音源を利用したい場合の設定も同一コンテクストにまとめることもできます。
最後にスクリプトから何という字幕を出すかを設定します。
解説 -ダイアログウェーブの再生-
➀BP_ThirdPersonCharacterからダイアログウェーブの再生
Play Dialogue at Locationノードから再生したいDialogu Waveの組み合わせに応じた音声を利用することができます。
プロジェクト設定から字幕を有効化されているのを確認します。
実行するとConeアクタに応じて音声が切り替わっているのを確認できます。
もちろん字幕を無効にすると音声だけの機能で動作できます。
このように会話のパターンごとにDialogueWave を用意し、それを再生するのがダイアログ アセットです。
DialogueWave の参照からは設定したセリフの変数を取得することもできるので、同時の字幕UIに流すことも可能です。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。