0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UE5 + ADXで、ノベルゲームの台詞にブレス音などをランタイムで合成し、キャラクターが生きている感を出してみる

Last updated at Posted at 2025-07-01

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、キャラクターのボイス主導でつくる「間」や息遣いなど、そのキャラクターが生きている感を演出するテクニックを紹介します。

たとえばこんなシチュエーションが考えられます。

  • キャラクターがべらべらとウンチクを喋り続けているが、プレイヤーは途中から決定ボタンでスキップできる(聞き流せる)ようになる
  • キャラクター同士が口論になり、台詞の間に別の台詞が割り込んでくる
  • 静かなシーンで、キャラクターの台詞の合間に息遣いが再生される
  • 戦闘シーンなどで、キャラクターの台詞の合間で息を切らせたり舌打ちが再生される

当記事ではUE5.5+「ADX LE UE SDK(2.01.00)」を使用します。
また、基本的にブループリントのみでの実装を行います。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

前提

「ADX for UE LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)

ADX for UEの導入で、一歩上のサウンド表現を(実践編)

実装

AtomCraftでマーカーを設定する

まずはサウンドオーサリングツール、AtomCraftで「マーカー」と呼ばれる、台詞の合間のタイミングを埋め込んでいきます。

キューの作成

マテリアル(音源)として、静かなシーンでのブレス音(CV_A_BreathA)、及び戦闘中などの激しいシーンでの息切れの音(CV_A_BreathB)をそれぞれ2つずつ用意しました。
A01.png
それぞれがランダムで再生されるよう、キューを新規に作成します。
キューシートを右クリックし、「新規オブジェクト」→「キュー『ランダムノーリピート』の作成」を選択します。
「ランダムノーリピート」のキューでは、ランダム再生かつ連続して同じトラックが再生されないようになっています。
A02.png
該当する種別のブレス音をドラッグ&ドロップし、それぞれ別トラックとして配置します。
A03.png
「CV_A_BreathB」についても同じように行います。
A04.png

マーカーの設定

トラックリストの空欄で右クリックし、「マーカーの作成」を選択します。
A05.png
タイプはUE側でタイミングを検知できる「コールバック」にし、タグを「BreathA」とします。
A06.png
ピンク色のマーカーが配置されました。ドラッグで再生位置を移動できます。
A07.png
台詞によっては複数個所にブレスタイミングが欲しいこともあるかもしれません。
そんなときは、マーカーを右クリックして「複製」ができます。
A08.png
複製したマーカーをドラッグして任意の位置に移動させます。
A09.png
インスペクターで細かいタイミングを指定することも可能です。
A10.png
異なるシチュエーションに対応したい場合は、タグを別のものにしてみましょう。今回は「BreathB」としました。
これらのタグにより、UE側で別のサウンドを再生したり、異なる処理を行ったりできます。
A11.png
こちらもタイミングを調整します。
A12.png

キューシートのビルド

ここまでできたら、キューシートをビルドします。
A13.png
A14.png

UE5で台詞に演出を盛り込む

キューシートのインポート

ビルドしたacbファイル、acfファイルをコンテンツドロワー(コンテンツブラウザ)にインポートします。
acfファイルのインポート時に出てくるダイアログでは「Yes」を選択します。
これにより、プロジェクトにAtom Configが適用されます。
B01.png
B02.png
正常に再生できることを確認します。
B03.png

キューのマーカーを検知し、イベントをトリガーする

ブレス音を再生するためのAtomコンポーネントを追加します。
今回はキャラクターボイスを再生するブループリントアクター「BP_TalkManager」に追加しています。
こちらは以前の記事UE5 + ADXで作る、ノベルゲームのサウンドテクニック(基本編)で作ったものと同じものです。
B04.png

マーカーを検知するイベントを登録します。処理のタイミングはEvent Begin Playから続きます。
B05.png
ボイス再生用のAtomコンポーネントのGetノードを配置し、そこから線を伸ばしてAssign On Atom Sound Cue Sequencer Eventノードを配置します。
B06.png
新しくイベントノードが作られます。
Set Soundで任意のブレス音のキューを指定し、Playで再生します。
B07.png
正常に処理が行われているか確認するため、Print Stringでデバッグメッセージを表示します。
B08.png
台詞の合間にブレス音が再生され、デバッグメッセージが表示されました。
B09.png

マーカーのタグによって処理を分岐させる

AtomCraftでマーカーに設定したタグを見て、処理を分岐させていきます。
イベントノードのアウトプットピン「Event Info」からBreak Atom Sequencer Event Infoノードで情報を分解し、取り出せます。
C01.png
Switch on StringでタグのStringによって分岐します。
C02.png
タグが「BreathA」か、「BreathB」かで異なるキューをSet Soundノードで設定し、再生します。
C03.png

これにより、静かなシーンでは穏やかな息遣いに、戦闘シーンでは激しい息遣いといったように異なるサウンドが再生できます。

ブレスと台詞が被るのを防ぐ

音声の間のとり方やブレス音の長さ次第では、通常の台詞に被って再生されてしまうこともあります。
それを防ぐよう、ブレス音再生中は通常台詞の再生を一時停止するようにしてみましょう。

まずはブレス音再生中は通常台詞のAtomコンポーネントをSet Pausedノードで一時停止します。
D01.png
ブレス音のコンポーネントのGetノードから線を伸ばし、Assign On Atom Sound Play State Changedで再生状態の変化を検知開始します。
D02.png
再生状態が変化した際のイベントが作られます。
D03.png
「Play State」を照合し、「Stopeed」(再生終了状態)かを判定します。
D04.png
その場合、イベントの検知を完了とし、また通常台詞の再生を再開します。
D05.png

これで、より自然に息継ぎや台詞の間が生まれるようになりました。

キャラクターボイスに一工夫加え、半プロシージャルな台詞の再生演出をおこなってみました
用意するボイスデータにも一工夫が必要ですが、より生き生きとした、リアリティのあるキャラクター造形を実現することができるでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?