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-06-06

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の導入で、一歩上のサウンド表現を(実践編)

実装

2Dキャラ × 3D背景でも違和感のない音空間をつくる

UE5ではFabにて高品質なアセットが提供されており、背景を作るのに有用です。

Fab https://www.fab.com/ja

「キャラは2Dだが背景は3D」といったシーン作りもUE5ではじゅうぶんに可能です。
ただし、この場合ではキャラクターの配置と音の定位に違和感を抱かせないような工夫・調整が必要です。
ここでは、

  • すべてのサウンドを2Dで再生する
  • キャラクターのボイスに定位を持たせる
    2つの方法について見ていきましょう。

すべてのサウンドを2Dで再生する

通常のノベルゲームのように、すべてのサウンドを方向や距離による減衰なく再生する方法です。どのような位置関係でも聞かせたい音声を届けることができるため、比較的オーソドックスな形式といえます。

減衰のないサウンド(空間の状況を加味しないサウンド)は、Play Sound 2Dノードで再生することができます。
A01.png
声とは別に背景の音や、空間を加味する効果音の再生には通常どおりのPlay Sound at Locationなどを使用すると局所的に立体的なサウンド演出が得られます
A02.png

キャラクターのボイスに定位を持たせる

こちらは、キャラクターのボイスを「キャラクターの話している位置」から聞こえるようにする方法です。
カメラを動かすことができたり、画面内でキャラクターが移動したりといったシーンに臨場感を持たせられます。

A03.png

A04.png

リッチにも聞こえるこちらの表現ですが、ノベルゲームで重要な「キャラクターの台詞」をプレイヤーが聞き逃さないよう減衰には気を使う必要があるかもしれません。後述のAttenuation(減衰)の設定などを利用し、物語体験を担保しましょう。

リスナーの位置を設定する

「リスナー」を設定することで、見せかけの空間とは別に聞こえ方を設定し、よりデザインされたサウンド体験を実現することもできます。
リスナーはサウンドの聴取位置のことであり、通常はカメラ位置にあります。
これを登場人物全員の声が聞き取りやすい位置などに移動させることで、柔軟に聞こえ方を設定できます。

通常は一体化しているカメラとリスナーを……
Listener_01_A.png
分離して独自のカスタマイズに!
Listener_01_B.png

リスナー位置を分かりやすくするためのアクターを作成します。
コンテンツドロワー(コンテンツブラウザ)で右クリックし、「Blueprint Class」を選択。
A05.png
親クラスは「Actor」とします。
A06.png
適当に名前をつけます。今回は「BP_ListenerPoint」としました。
A07.png
レベル上に置いたときに視認性が向上するよう、「PaperSprite」コンポーネントを置き任意の画像を設定します。
A08.png
レベル上では設定された画像が表示されるため、多少分かりやすくなります。
A09.png
レベルブループリントなどからGet Player Controllerノードを置き、そこから線を伸ばしSet Audio Listener Overrideでリスナー位置を上書きします。対象は「BP_ListenerPoint」のRoot Componentがいいでしょう。
A10.png

リスナーについて詳しく解説した記事はこちらになります。
動画つきで違いを見ていますので、流し読みでもイメージが湧くかもしれません。

Attenuation設定

ピンポイントで減衰を設定したいけどAtomCraftで微調整するほどでもないな……という場合には、Attenuation設定をUE側で上書きする方法もあります。

配置したキューごとに手動で設定をしたり、減衰設定をまとめたアセットを作り使い回すことも可能です。
A11.png

減衰設定の詳しい実装法やパラメータ設定については、こちらの記事をご覧ください。

ボイス終了を待って進行制御(キー入力待ち/自動送り)

キャラクターの台詞の再生が終わるとページ送りを促すアイコンを表示したり、自動で次の台詞の表示/再生を行うテクニックです。

こちらは単体の記事で詳しく解説していますので、参照してみてください。

台詞を一文字ずつ表示する方法と、その効果音の再生

また、ボイスがない文章において、文字が一文字ずつ表示されるたびにSEを鳴らしたり、タイプ音を再生する演出もよく見られます。

再生タイミングが密になるため、SEが重ならないよう極々短いSEが望ましいです。
タイピング音などは多少のピッチ幅を持たせたり、キュー側でランダムな音を再生すると、同じ音が機械的に連続している感が抑えられて自然になります。

UIでのメッセージ表示時に、テキスト更新処理の代わりに表示予定のメッセージを変数として格納します。
メッセージを一気に表示する処理では次のようになります。
B01.png

メッセージの入力ピンを右クリックし、「Promote to Variable」を選択して変数化します。
B02.png
B03.png
変数「CurrentWordCount」を追加します。型はIntegerです。
この変数は「現在の表示文字数」になります。
B04.png
メッセージの入力時にCurrentWordCountを0にします。
B05.png
新規にカスタムイベントを作成します。名前は「AddWordCount」としました。
B06.png
このイベントは表示文字を加算するものです。
「CurrentWordCount」を加算し、テキストを更新します。
B07.png
「MessageText」をString型に変換します。
B08.png
文字列を指定数の文字だけ切り出すLeftノードを使い、「CurrentWordCount」ぶんの文字を表示します。
B09.png
文字の表示間隔を指定します。
Set Timer by Eventを配置し、「Time」に表示間隔を、「Looping」にチェックを入れます。
B10.png
Create Eventノードでイベントを指定します。対象は「AddWordCount」です。
B11.png
文字がだんだんと表示されていくようになりました。
B12.png
表示間隔が長すぎるので、「Time」の値で調整します。
B13.png

文字表示ごとに効果音を再生するには、イベント「AddWordCount」ごとにPlay Sound 2Dノードを実行すればOKです。
B14.png
キューのインプットピンを右クリックして「Promote to Variable」を選択し、変数化しておくと便利です。
B15.png
文字表示のSEが変数化したことで、「キャラクターごとに文字表示SEを変える」「過去の回想のみSEをタイプライターの打鍵音にする」などの演出が可能です。
B16.png

ただし、このままでは文字表示が台詞末尾まで終わったあともSEが流れ続けてしまいます。
「CurrentWordCount」が台詞の全体文字数未満の場合のみ、このイベントを実行するようにすれば完璧です。
B17.png

選択肢のサウンド演出

「選択肢」はノベルゲームにおいて、プレイヤーとの重要なインタラクションになります。
ボタンの選択時だけでなく、カーソルの移動(マウスオーバー時)などにもサウンドを再生し、レスポンスを返してあげると操作体験が格段に向上します。

選択肢のUIづくりから始めていきます。
コンテンツドロワー(コンテンツブラウザ)で右クリックし、「Use Interface」→「Widget Blueprint」を選択します。
D01.png
親クラスは「User Widget」です。
D02.png
名前を適当につけます。今回は「WBP_Selection」としました。
D03.png
まずは基本となる「Canvas Panel」を配置します。
D04.png
選択肢を縦に並べるパーツである「Vertical Box」を配置します。
D05.png

「Button」を複数配置し、その中に「Text」を子として配置します。
D06.png

選択肢ボタンの表示間隔を指定する「Padding」を上げ、多少の間が空くようにします。
D07.png
ここで「Size」を「Fill」にすると、「Verical Box」の領域いっぱいまでそれぞれの要素の大きさが拡大します。
D08.png
「Verical Box」のパラメータを設定し、画面上でのレイアウトを決めます。
D09.png
「Anchors」は画面中央にし、ユーザーの画面環境によって表示がずれないようにしておきましょう。
(中央に設定しておくと、ウィンドウの大きさに関わらずウィンドウ中央を基準として表示されます)
D10.png
イベントグラフに移動します。
D11.png
My Blueprintパネルのそれぞれのボタンを選択し、「On Released」「On Hovered」の+ボタンを押してイベントを追加します。それぞれボタンをクリックして離したとき、ボタンにカーソルを載せたときのイベントになります。
D12.png
それぞれについて、対応するキューを指定しサウンドを再生します。
D13.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?