遠くのたき火が、すぐそばにあるような大きさで聞こえる。BGMを下げたら、足音まで一緒に小さくなる。音が鳴るようになったら、次は「どこで、どのくらい聞こえるか」を整えたいところです。
今回は、距離による変化と、音の種類ごとの音量調整を分けて作ります。前者はSound Attenuation、後者はSound ClassとSound Mixを使います。
この記事でわかること
- Sound Attenuationで、たき火から離れると小さくなる音を作る手順
- 音を聞いている位置(Listener)がどこにあるか
- Sound ClassとSound Mixで、BGMとSEを別々に上げ下げする方法
- SubmixとAudio Volumeで部屋の響きを整える考え方
まずは、たき火から離れると音が小さくなるところまで試します。そのあとBGMとSEのスライダーを加え、同じレベルで両方の効果を確かめましょう。
音に「鳴っている場所」があるか
BGMはカメラが動いても同じように聞こえてほしい。たき火は、その場所へ近づくほど大きく聞こえてほしい。この違いで、再生方法を選びます。

2D再生は、ワールド内の位置による聞こえ方を使いません。BGMやボタン音に向いています。ステレオ素材の左右の広がりは、そのまま使えます。
位置を持つ再生は、足音、たき火、爆発音などに使います。そこへ、距離による音量変化や方向の設定を加えます。
| ノード | 使う例 | 再生後の操作に使う戻り値 |
|---|---|---|
| Play Sound 2D | 一回鳴ら すボタン音 | なし |
| Play Sound at Location | その場所に残す爆発音 | なし |
| Spawn Sound 2D | あとで止めたいBGM | Audio Component |
| Spawn Sound at Location | あとで操作したい固定位置の音 | Audio Component |
| Spawn Sound Attached | 動く物に付いてくる音 | Audio Component |
Audio Component は、再生している音を操作する部品です。Spawn系の戻り値を変数へ残すと、あとからその音にStopなどを呼べます。Play Sound系には、その操作用の戻り値がありません。
今回は、固定位置の環境音に Ambient Sound Actor を使います。音を置いて鳴らすためのActorで、Blueprintから再生ノードを呼ばずに試せます。
音の素材となるSound Waveと、鳴らし方をまとめるSound Cueについては、Sound WaveとSound Cueの記事で扱っています。
実践1:たき火から離れると小さくなる
Third Personテンプレートなど、歩き回れるレベルを使います。広い床を用意し、目印になるCubeを一つ置いてください。たき火の見た目がなくても、音の実験はできます。
音と配置を用意する
- ループ用のたき火の音を取り込み、Sound Waveを SW_Fire と名付ける。最初は、左右に分かれていないモノラルの素材が、方向を確認しやすい。
- SW_Fireを開き、「Looping」をオンにする。
- 「Virtualization Mode」を Play When Silent にする。
- SW_Fireをレベルへドラッグし、作られたAmbient SoundをCubeの位置へ置く。
- Ambient Soundの「Auto Activate」をオン、Volume MultiplierとPitch Multiplierを1.0にする。
Loopingは、素材が終わったら繰り返す設定です。Auto Activateは、Play開始時にそのActorが音を鳴らし始める設定です。この二つは別の役割です。
Play When Silentは、聞こえない間も再生を続ける設定です。この小さな実験では、範囲外へ出たり音量を0にしたりしたあと、また聞こえる状態へ戻しやすくするために使います。無音でも音の処理は続くので、大量の環境音への使い方はあとで見直します。
減衰アセットを割り当てる
Attenuation(減衰) は、離れるにつれて音を小さくすることです。その設定をまとめたSound Attenuationアセットを作ります。
コンテンツブラウザで右クリックし、音のカテゴリから「Sound Attenuation」を選び、ATT_Ambient と名付けます。
| 項目 | 設定 |
|---|---|
| Enable Volume Attenuation | オン |
| Attenuation Function | Linear |
| Attenuation Shape | Sphere |
| Inner Radius | 300 |
| Falloff Distance | 1500 |
| Enable Spatialization | オン |
| Spatialization Method | Panning |
作ったATT_Ambientを、レベルに置いたAmbient Soundの「Attenuation Settings」へ指定します。「Override Attenuation」はオフ、「Allow Spatialization」はオンにします。
Override Attenuationは、その配置だけで設定を上書きするスイッチです。今回は共通アセットの値を使うので、オフにしておきます。

Sphereは球状の範囲です。Inner Radiusは中心から減衰を始めるところまで、Falloff Distanceはその先の幅を表します。標準単位はcmなので、今回の範囲は次のようになります。
| 音を聞く位置までの距離 | 今回のLinearによる音量倍率 |
|---|---|
| 3mまで | 1.0 |
| 3mから18m | 距離に応じて1.0から0へ下がる |
| 18m以遠 | 0 |
300+1500=1800cm、つまり18mです。1500を「中心からの距離」と読まないことがポイントです。
保存してPlayし、Cubeの近くから離れてみます。近くでは大きく、離れると小さくなり、近づき直すと再び聞こえれば、最初の段階は成功です。
Linearは、一定の距離を進むごとに、倍率も一定ずつ下がるカーブです。ここでは結果をつかみやすいので選びました。Natural Soundなど別のカーブでは、範囲外の扱いも設定によって変わります。今回の「18mで0」を、すべてのカーブに当てはめないようにしてください。
どこからの距離で聞いている?
音量の距離を測る相手は、Listener(リスナー)=ゲーム内の「耳」の位置です。通常はカメラ側にあります。

三人称では、キャラクターが音源へ近づいても、カメラは少し後ろにいます。キャラクターの足元から18mを測って、聞こえ方とぴったり一致しないことがあるのはこのためです。高さも含む空間内の距離で考えます。
また、Spatialization(空間化) は、「左にある音が左から聞こえる」といった方向をつける設定です。今回のPanningは、左右などの出力のバランスで方向を表します。距離減衰とは別なので、片方だけを使うこともできます。
ステレオ素材でも空間化は可能ですが、左右のチャンネルの広がりが関係します。初めはモノラルのたき火で、近づく・離れる・横を向く、の違いを聞くと分かりやすくなります。
Sound ClassでBGMとSEを分ける
次は、たき火の音はそのままで、BGMだけ小さくできるようにします。そこで使うのが Sound Class=音を種類ごとにまとめる分類です。SEは、足音やたき火などの効果音を指します。
コンテンツブラウザの音のカテゴリからSound Classを三つ作ります。
| アセット | 今回の役割 |
|---|---|
| SC_Master | BGMとSEをまとめる親 |
| SC_BGM | 曲をまとめる |
| SC_SE | たき火や足音をまとめる |
SC_Masterを開き、Child ClassesへSC_BGMとSC_SEを追加します。各Class のVolumeとPitchは、まず1.0のままにします。

Sound Class自身にもVolumeがあります。 親の音量を変えると子にも影響するので、全体と種類別の音量を整理できます。今回はClassの基本値は1.0にして、操作中の変更をSound Mixへ持たせます。
ループ用のBGMを取り込み、SW_BGM と名付けます。二つのSound Waveを次のように設定してください。
| アセット | Sound Class | Looping | Virtualization Mode |
|---|---|---|---|
| SW_BGM | SC_BGM | オン | Play When Silent |
| SW_Fire | SC_SE | オン | Play When Silent |
新しい音にはプロジェクトの既定Classが割り当たる場合があります。名前がBGMやSEになっているだけで自動分類されるわけではないので、音の「Sound Class」を確認しましょう。
Sound Mixで音量の倍率を変える
Sound Mix は、Sound Classへ適用する音量などの調整をまとめるアセットです。たとえば「BGMは0.5倍、SEは1.0倍」という変更を持たせられます。
コンテンツブラウザの音のカテゴリからSound Mixを作り、SM_UserAudio と名付けます。開いて、Sound Class Effectsへ次の2件を追加してください。
| Sound Class Object | Volume Adjuster | Pitch Adjuster | Apply to Children |
|---|---|---|---|
| SC_BGM | 1.0 | 1.0 | オン |
| SC_SE | 1.0 | 1.0 | オン |
Mixの「Initial Delay」と「Fade in Time」は0、「Duration」は-1にします。開始後に時間切れで解除されない設定として使います。
1.0はそのまま、0は無音になる倍率です。0.5は音の信号を半分にする値で、「体感で半分の大きさ」と同じ意味ではありません。
このMixを有効にするのが Push Sound Mix Modifier です。今回はレベル開始時に一度だけ呼びます。スライダーを動かすたびに呼ぶ必要はありません。
値の変更には Set Sound Mix Class Override を使います。Overrideは、ここでは「そのMixにあるClassの調整値を書き換える」という意味です。

実践2:BGMとSEのスライダーを作る
ここからは、今のレベルに小さな音量パネルを表示します。BGMを流し、二つのスライダーからSM_UserAudioを書き換えます。ゲームを止めずに聞き比べるための確認用UIです。

1. Widgetを作る
Widgetは、画面に表示するUIの部品です。今回は二つのスライダーを、一つの音量パネルへまとめます。
コンテンツブラウザの「User Interface」からWidget Blueprintを作り、WBP_AudioSettings と名付けます。DesignerにCanvas Panelを置き、その子にVertical Boxを追加して、左上へ配置します。Canvas Panelは配置の土台、Vertical Boxは子の部品を縦に並べる容器です。
Vertical Boxの中へ、上からText「BGM」、Slider、Text「SE」、Sliderを置きます。二つのSliderを Slider_BGM、Slider_SE と名付けてください。
| Sliderの項目 | 設定 |
|---|---|
| Min Value | 0 |
| Max Value | 1 |
| Value | 1 |
| Is Variable | オン |
| Is Focusable | オフ |
パネルは画面の一部に収まる大きさにします。Canvas PanelのVisibilityは「Not Hit-Testable (Self Only)」にして、子のSliderは操作できる状態にします。全面を覆うBorderなどは、今回は不要です。
Is Focusableをオフにするのは、スライダーがキーボード操作を受け取り続けるのを避けるためです。音量を触ったあと、3D画面へ戻って歩き回りやすくします。
2. 開始時の処理を三つへ分ける
レベルのツールバーからLevel Blueprintを開きます。Event BeginPlayへ Sequence をつなぎ、「Add pin」で出力をThen 0・Then 1・Then 2の三つにします。
Sequenceは、出力を上から順に実行へ進めるノードです。ここでは、音の準備、UIの表示、入力の設定へ分けます。BGMが終わるまで待つ、という意味ではありません。

以下の図は、同じ一つのSequenceから出る枝を分けて描いたものです。BeginPlayやSequenceを三つ作る必要はありません。
3. Then 0:Mixを有効にしてBGMを鳴らす
Then 0から Push Sound Mix Modifier → Play Sound 2D と、白い実行線をつなぎます。
| ノード | 設定 |
|---|---|
| Push Sound Mix Modifier | In Sound Mix Modifier=SM_UserAudio |
| Play Sound 2D | Sound=SW_BGM、Volume Multiplier=1.0、Pitch Multiplier=1.0 |

今回は一つのレベルで鳴らし続けて比較するので、Play Sound 2Dを使います。曲を止めたり切り替えたりする仕組みへ広げるなら、Spawn Sound 2Dの戻り値を保持する形にします。
4. Then 1:パネルを表示する
Then 1から Create Widget → Add to Viewport とつなぎます。
Create WidgetのClassをWBP_AudioSettingsにし、「Owning Player」へ Get Player Controller(Player Index=0) のReturn Valueをつなぎます。Create WidgetのReturn Valueは、Add to ViewportのTargetへつなぎます。
Player Controllerは、プレイヤーの入力などを扱うActor です。ここではIndex 0で一人目のプレイヤーを取得し、その人が使うパネルとして作ります。

Create Widgetの戻り値は、今作ったパネルそのものです。そのパネルをAdd to Viewportへ渡すことで画面に表示します。
5. Then 2:マウスとゲーム入力を使えるようにする
Then 2から Set Input Mode Game And UI → Set Show Mouse Cursor とつなぎます。Set Show Mouse Cursorは、Get Player ControllerのReturn Valueから線を引いて検索すると見つけられます。
この枝にもGet Player Controller(Player Index=0)を置き、そのReturn Valueを、Game And UIのPlayer Controllerと、Show Mouse CursorのTargetへつなぎます。
| 項目 | 設定 |
|---|---|
| In Widget to Focus | 未接続 |
| In Mouse Lock Mode | Do Not Lock |
| Hide Cursor During Capture | オフ |
| Show Mouse Cursor | オン |

Game And UIは、UIが使う入力をUIへ渡し、それ以外をゲーム側にも渡すモードです。カーソルを表示するだけで は入力のモードは変わらないので、両方を設定します。
6. SliderからClassの音量を書き換える
WBP_AudioSettingsへ戻り、DesignerでSlider_BGMを選びます。詳細のEventsから「On Value Changed」の+を押します。
このイベントは、スライダーの値が変わったときに呼ばれます。白い実行出力を Set Sound Mix Class Override へ、数値のValueをそのノードのVolumeへつないでください。

| 引数 | 設定 |
|---|---|
| In Sound Mix Modifier | SM_UserAudio |
| In Sound Class | SC_BGM |
| Volume | イベントのValue |
| Pitch | 1.0 |
| Fade in Time | 0.1 |
| Apply to Children | オン |
Fade in Timeは、今の音量から新しい音量へ移る秒数です。ここでは0.1秒でなめらかに変えます。
Slider_SEにもOn Value Changedを追加し、同じ接続を作ります。違いは In Sound Class=SC_SE だけです。MixはどちらもSM_UserAudioを指定します。
Blueprintをコンパイルして保存してください。スライダーとMixの初期値はどちらも1.0なので、最初は両方の音が元の倍率で鳴ります。
聞こえ方を確かめる
たき火が聞こえる近さでPlayし、スライダーを操作します。操作後に歩くときは、パネル以外の3D画面をクリックしてからWASDを使ってください。
| 試すこと | 聞く結果 |
|---|---|
| BGMを0.5へ | BGMだけが小さくなり、たき火は変わらない |
| SEを0へ | たき火が聞こえなくなり、BGMは鳴り続ける |
| SEを1へ戻す | たき火がまた聞こえる |
| 両方1でたき火から離れる | BGMは同じ、たき火だけ距離で小さくなる |
| たき火へ近づき直す | たき火が再び大きくなる |

最後にPlayを止め、SW_FireのSound Classを一度SC_BGMへ変えてみます。再びPlayすると、BGMスライダーでたき火まで小さくなります。「どのスライダーで変わるか」は、音のClassへの割り当てで決まることが確かめられます。確認後はSC_SEへ戻してください。
SubmixとAudio Volumeで響きを整える
ここまでの実践は、距離と音量の調整です。さらに、複数の音をまとめて加工したり、部屋の響きを加えたりしたくなったら、次の仕組みを使います。
Submix:音を集めて加工する先
Submix は、複数の音を集める経路です。そこへエフェクトを置くと、集まった音をまとめて加工できます。

Sound Submixアセットを作り、「Submix Effect Chain」へエフェクトのプリセットを追加します。音側は「Base Submix」(版によってSound Submix)などの流し先を指定します。
たとえば EQ は、低い音や高い音の強さを調整する加工です。Dynamics Processor は、大きな音を抑えるなど、音量の変化を整える加工に使えます。
Sound Classが分類と設定をまとめるもの、Submixが音を集めて加工する経路、と考えると使い分けやすくなります。今回のBGM・SEスライダーを作るために、Submixも追加する必要はありません。
Audio Volume:場所に応じて響きを変える
リバーブ(残響) は、洞窟などで音が反射して残るような響きです。Audio Volume は、その響きなどを変える領域をレベルへ置くActorです。

試すならAudio Volumeを配置して洞窟や部屋を覆い、次を設定します。
| 項目 | 設定の例 |
|---|---|
| Apply Reverb | オン |
| Reverb Effect | 用意したReverb Effectアセット |
| Volume | 0.5 |
| Fade Time | 0.5秒 |
音側も残響へ送る必要があります。たき火で試すならATT_Ambientの「Enable Reverb Send」をオンにし、Reverb Send MethodをManual、Manual Reverb Send Levelを0.5にします。Sound Class側の「Send to Master Reverb」も確認します。
これは、音の一部を残響の処理へ送る設定です。音を流したままListenerが領域を出入りし、響きが切り替わるかを確かめます。2D音にも別のリバーブ送りの設定があるので、「2Dだから一切響かない」とは限りません。
うまくいかないとき
| 症状 | 確認するところ |
|---|---|
| たき火が一度で終わる | SW_FireのLoopingとAmbient SoundのAuto Activate |
| 離れても変わらない | 2Dで鳴らしていないか、ATT_Ambientの割り当て、Enable Volume Attenuation、Override |
| 距離と聞こえ方が合わない | キャラクターでなくListenerから測っているか、Linearか、300と1500の読み方 |
| 左右の方向が分からない | Enable Spatialization、Allow Spatialization、実際の音源とカメラの位置 |
| スライダーが触れない | Game And UI、Show Mouse Cursor、SliderのIs Enabled、手前を覆うUI |
| スライダーで変わらない | Mixを有効にしたか、OverrideのMix/Class、Value→Volumeの接続 |
| BGMとSEが一緒に下がる | SW_FireのClassがSC_BGMになっていないか、親Classを変更していないか |
| 0から戻しても聞こえない | 音がまだ再生中か、LoopingとPlay When Silent |
| 残響が変わらない | Audio Volume、Listenerの位置、Reverb Effect、音側のリバーブ送り |
おまけ:ゲームへ組み込むとき
メニュー中だけBGMを下げる
ユーザー設定とは別に、メニュー中だけ音を引っ込めるなら、SM_MenuDuck のような別Mixを用意します。SC_BGMのVolume Adjusterを0.3、Pitch Adjusterを1.0、MixのDurationを-1にします。

メニューを開くときにPush Sound Mix Modifier、閉じるときにPop Sound Mix Modifierで同じMixを指定します。PushとPopは対応させ、開いている間にPushを繰り返さないようにします。実際にゲームをポーズする場合は、BGMの「Is UISound」など、ポーズ中も鳴らす設定も確認します。
設定値を保存する
今回のスライダーはPlayを始め直すと1.0へ戻ります。設定を残すには値を保存し、起動時に読み戻して、MixのOverrideとスライダーの表示値の両方へ反映します。セーブ/ロードやゲーム設定画面の記事へ続きます。
音が増えたら調整する
Play When Silentは、無音の間も再生の処理を続けます。多数の環境音を置く段階では、必要な音だけに使い、同時再生数を扱うSound Concurrencyなどと合わせて見直します。
また、音量倍率を上げすぎたり、多数の音を重ねたりすると音が割れることがあ ります。Sound Classへ設定場所を移しても、それだけで音割れを避けられるわけではありません。ゲーム中の音をまとめて聞いて調整します。
プレイヤーが聞く音と、AIの聴覚も別の仕組みです。敵へ物音を知らせる場合は、AI Perceptionの記事のReport Noise Eventなどを使います。
まとめ
距離による聞こえ方はSound Attenuation、種類別の音量はSound ClassとSound Mixで整えます。今回は、たき火へ近づく・離れる操作と、BGM・SEのスライダーで、その違いを確かめました。
音を追加するときも、同じ性格なら減衰アセットを共有し、該当するClassへ分類できます。音源ごとに設定を増やす前に、「どの距離で聞かせたいか」「どの音量設定に従わせたいか」を決めてみてください。