探索中は穏やかな音が流れ、戦闘に入るとドラムが加わる。戦いが終わればドラムが引き、元の静けさへ戻る。曲を最初からかけ直さずにこんな変化を付けられると、同じマップでも場面の緊張感が伝わります。
今回は 同じ曲を楽器ごとの「層」に分け、聞こえる層を増減させるBGM を作ります。MetaSoundsで2つの音を同時に再生し、Blueprintからドラムの音量を変える構成です。実践では戦闘エリアへの出入りをきっかけにするので、敵AIを用意せずに音の変化を試せます。
この記事でわかること
- 曲を切り替える方法と、楽器を重ねる方法の違い
- 途中から重ねてもリズムが合う素材の用意
- MetaSoundsでの同時再生と、音量の滑らかな変化
- 戦闘エリアに入るとドラムが加わり、出ると消える仕組み
MetaSounds入門 のWave PlayerとInputを使います。まだ触っていなければ、先に音を1つ鳴らしてみてください。実践はUE5のThird Personテンプレートで、プレイヤー1人を動かす想定です。
BGMを層として考える
完成したBGMファイルには、メロディ、ドラム、ベースなどの音がまとめて入っています。そのまま再生するだけでは、「今はドラムだけを引く」という操作はできません。そこで、あらかじめ楽器のまとまりごとにファイルを分けておきます。
この重ね合わせる音のまとまりを レイヤー(層) と呼びます。たとえば、穏やかな伴奏を土台にして、戦闘ではドラム、ボス戦ではさらに力強い弦の音を足す、という使い方です。

ここで大切なのは、聞こえていない層も、裏では再生し続ける ことです。探索パートが曲の半分まで進んだとき、ドラムも同じ場所まで進んでいれば、音量を上げるだけでその続きを重ねられます。戦闘に入ってからドラムを曲の先頭から再生すると、フレーズの位置が合わなくなります。
つまり、「別の曲に切り替える」というより 「同じ曲の厚みを変える」 演出です。実践は、違いを聞き取りやすい探索パートとドラムの2層から始めましょう。
縦の重ねと横の遷移
状況に反応する音楽には、層を重ねる方法のほかに、曲そのものを入れ替える方法もあります。

| 方法 | 変えるもの | ゲームでの例 |
|---|---|---|
| 縦の重ね(レイヤリング) | 同じ曲の楽器の組み合わせ | 敵に気づかれるとドラムが加わる |
| 横の遷移(トランジション) | 曲やフレーズそのもの | フィールド曲からボス専用曲へ移る |
今回は縦の重ねを使います。素材をそろえて同時に再生しておけば、場面が変わったときに操作するのは音量だけです。土台の音が続いているので、音楽を途切れさせずに雰囲気を変えられます。
横の遷移では、すぐに曲を替えるのか、今のフレーズ が終わるまで待つのか、といった切り替え方も決めます。「別の曲へ移る演出」が必要になったときに考えると、役割を整理しやすいでしょう。
素材の開始位置と長さをそろえる
用意するのは、同じ曲から分けた次の2ファイルです。どちらもステレオ、つまり左右2チャンネルの音が入ったWAVにします。
| UEへ取り込んだ後の名前 | 中身 |
|---|---|
SW_Explore | 穏やかな伴奏。長く伸びる音など、ドラムがなくても聞ける土台 |
SW_Combat | その伴奏に合わせて作ったドラム |
作曲ソフト(DAW)を使うなら、同じ曲の中でこの2つのパートを作り、片方ずつ書き出します。このようなパート別の素材は ステム(Stem) とも呼ばれます。素材集を使う場合も、同じ曲のステムがそろっているものを選ぶと扱いやすくなります。

書き出す範囲は、開始位置も終了位置も同じ にします。たとえば120 BPMの4拍子で8小節なら、2つとも曲の先頭から16秒間です。BPMは1分間の拍数、拍は「1、2、3、4」と数えるリズムの刻み。4拍子では4拍で1小節なので、この例では1小節が2秒になります。
ドラムが途中から入る素材でも、先頭の無音 を切り詰めないでください。その無音も、伴奏と位置を合わせるための時間です。末尾もそろえ、どちらも同じ地点へ戻って自然にループするようにします。
まずDAW上で2つを重ね、数周聞いてリズムやつなぎ目を確認しましょう。同じテンポというだけで、無関係な2曲が合うわけではありません。フレーズの位置や和音も合う素材を使います。
MetaSoundsで2つの層を鳴らす
最初はBlueprintとつながず、MetaSoundエディタだけで音を確かめます。
再生用アセットを作る
- 2つのWAVをコンテンツブラウザへ取り込み、
SW_ExploreとSW_Combatにします。 - コンテンツブラウザで右クリックし、「オーディオ」から MetaSound Source を作成。名前を
MS_BattleMusicにします。見つからない場合は「編集」→「プラグイン」でMetaSoundを有効にします。 - アセットを開き、「Interfaces」で
UE.Source.OneShotを外します。今回は一度鳴って終わる音ではなく、再生を続けるBGMです。 - ツールバーの「MetaSound」を選び、詳細の Output FormatをStereo にします。グラフの出力が
Out LeftとOut Rightになったことを確認します。
同じ合図で再生を始める
グラフへ Wave Player (Stereo) を2つ置き、それぞれの「Wave Asset」に対応するSound Waveを指定します。2つとも「Loop」をオンにし、次の設定をそろえてください。
| 設定 | 2つに入れる値 | 意味 |
|---|---|---|
| Pitch Shift | 0 | 音の高さと再生速度を 変えない |
| Start Time | 0 | ファイルの先頭から開始する |
| Loop Start | 0 | ループ時も先頭へ戻る |
| Loop Duration | -1 | ファイルの末尾までをループ範囲にする |

グラフの On Playから、両方のWave PlayerのPlayへ 線をつなぎます。On Playは「このMetaSoundの再生を始めた」という合図です。同じ合図を2つへ渡すことで、そろえた素材を同時にスタートさせます。
左右の音をMixerへ集める
次に Stereo Mixer (2) を追加します。Mixerは複数の音を混ぜるノードで、ここでの「(2)」は2組のステレオ音を受け取るという意味です。

次の順に、左右を分けてつなぎます。図は音の線に絞っていますが、先ほどのOn Playの接続は残してください。
| 出力元 | 接続先 |
|---|---|
| 探索側Wave PlayerのOut Left / Out Right | MixerのIn 0 L / In 0 R |
| ドラム側Wave PlayerのOut Left / Out Right | MixerのIn 1 L / In 1 R |
| MixerのOut L / Out R | グラフ出力のOut Left / Out Right |
Mixerの Gain 0 (Lin)を1、Gain 1 (Lin)を0 にします。Gainは、その入力の音を何倍にするかという値です。0なら無音、1なら元の大きさ。Gain 0が探索、Gain 1がドラムを受け持ちます。
保存してエディタの「Play」で試聴すると、探索パートだけが聞こえます。一度停止し、Gain 1を1にして再び試聴すると、今度はドラムも聞こえます。数周聞いてリズムが合っていれば、音の土台は完成です。確認後は停止し、Gain 1を0へ戻します。次の節では、再生を続けたままこの音量を動かせるようにします。
2つを混ぜると全体の音量も上がります。まず小さな試聴音量で聞き、音が割れる場合は素材側の音量を下げてください。
ドラムだけを滑らかに出し入れする
今はGainを直接変更しています。次はゲーム側から操作するための Input を作ります。Inputは、このMetaSoundが外から値を受け取る入口です。
- Mixerの「Gain 1 (Lin)」からドラッグし、InterpTo を追加します。その「Value」がGain 1へつながるようにします。
- InterpToの Interp Timeを2.0 にします。
- InterpToの「Target」からドラッグして「Promote to Graph Input」を選びます。
- 作成したInputを選び、詳細の「Input」を CombatIntensity に変更。型はFloat、初期値は 0 にします。「Is Constructor Pin」はオフにして、再生中にも変更できる入力にします。

InterpToは、値を目標まで少しずつ変えるノード です。CombatIntensityへ1を渡すと、ドラムのGainが2秒かけて1へ向かい、0を渡すと0へ向かいます。このように音量を滑らかに上げ下げするのがフェードです。
ここで変えるのはドラム側のGainだけ。探索側のGain 0は1のままにします。Inputの詳細にある「Editor Options」でWidgetをSliderにし、範囲を0〜1に設定してください。保存して試聴を始め、グラフ上のInputのスライダーを動かすと、再生中の値を変えられます。
0から1へ動かした後、手を止めてフェードを聞いてみましょう。探索パートを残してドラムが加われば成功です。0へ戻すと、ドラムだけが引きます。試聴を止めたら、Inputの初期値を0へ戻して保存します。
ゲーム側からは Set Float Parameter で、再生中の音へCombatIntensityの値を送ります。音を鳴らし直す必要はありません。
実践:戦闘エリアへの出入りで変える
マップの一角を戦闘エリアにします。プレイヤーが入るとドラムが加わり、外へ 出ると探索パートだけに戻る仕組みです。

今回は BP_MusicZoneというActorを1つだけ 置きます。このActorに「エリアへの出入りを調べる部品」と「BGMを鳴らす部品」をまとめるので、別のActorを探して受け渡す処理は要りません。
エリアとBGMを用意する
- 親クラスをActorにしてBlueprintを作り、
BP_MusicZoneと名付けます。 - 「コンポーネントを追加」で Box Collision を追加し、
BattleAreaにします。これは、プレイヤーが重なっているかを調べる箱型の範囲です。 - 同じActorに Audio コンポーネントを追加し、
MusicAudioにします。こちらがBGMの再生を担当します。

BattleAreaを選び、次の設定にします。Box Extentは箱の中心から端までの距離です。XとYを400にすると、スケール1の場合は幅・奥行きとも800 cm、つまり8 mの範囲になります。
| BattleAreaの設定 | 値 |
|---|---|
| 相対位置 | X=0、Y=0、Z=200 |
| スケール | X=1、Y=1、Z=1 |
| Box Extent | X=400、Y=400、Z=200 |
| Collision Presets | Custom |
| Collision Enabled | Query Only |
| Collision Responses | いったん全てIgnoreにして、PawnだけOverlap |
| Generate Overlap Events | オン |
Overlapは、ぶつかって止めるのではなく「重なったことを知らせる」設定 です。Third PersonキャラクターのCapsule Componentも「Generate Overlap Events」をオンにします。キャラクターの移動用コリジョンは、そのまま使ってください。
MusicAudioは次のように設定します。距離で音が変わる効果と、ドラムが増減する効果を混同しないよう、今回はBGMをどこでも同じように聞こえる音にします。
| MusicAudioの設定 | 値 |
|---|---|
| Sound | MS_BattleMusic |
| Auto Activate | オン |
| Volume Multiplier | 0.35から試す |
| Pitch Multiplier | 1.0 |
| Allow Spatialization | オフ |
| Attenuation Settings | None |
| Override Attenuation | オフ |
MS_BattleMusic側にもAttenuation Settingsを割り当てず、音の再生速度を変えるPitchは既定値のままにします。
コンパイル・保存して、レベルの歩ける床へBP_MusicZoneを1つ配置します。Actorのスケールも1にし、Player StartをBattleAreaの外へ離します。図の青い箱は判定範囲を示すもので、ゲーム中は見えません。目印が欲しければ、床に薄いCubeを置きます。音を流すのはAuto Activateの役割なので、BeginPlayへPlayノードを追加する必要はありません。
入ってきた相手がプレイヤーかを調べる
BP_MusicZoneのイベントグラフで右クリックし、Event ActorBeginOverlap を追加します。これは、このActorの範囲へ他のActorが入ったときのイベントです。Other Actorから、入ってきた相手を受け取れます。

- Other Actorからドラッグして Equal (Object) を追加します。グラフ上では
==と表示される比較ノードです。 - Get Player Character を追加し、Player Indexを0にします。そのReturn Valueを、比較ノードのもう片方の入力へつなぎます。
- Branch を追加。比較結果の赤い線を「Condition」へ、ActorBeginOverlapの白い実行線をBranchの実行入力へつなぎます。
Equal (Object)は 「この2つは同じ相手か」 を調べます。ここでは、入ってきたActorと、操作中のプレイヤーが同じならTrueです。Branchはその結果で処理を分けるので、Trueの先にドラムを加える処理を書きます。Falseは何もつながず、プレイヤー以外は無視します。
再生中のMusicAudioへ1を送る
「コンポーネント」一覧のMusicAudioをグラフへドラッグして、参照ノードを置きます。これは このActorが持っている、今BGMを鳴らしている部品 を指定するものです。

- MusicAudioの青い出力からドラッグし、Set Float Parameter を追加します。MusicAudioが「Target」へつながったことを確認します。
- 先ほどのBranchの True を、Set Float Parameterの実行入力へつなぎます。
- In NameをCombatIntensity、In Floatを1.0 にします。
図のBranchは、相手を比較した前の図の続きです。新しく増やさず、同じBranchのTrueを使います。In Nameは「どの入口へ送るか」、In Floatは「どの数値を送るか」です。MetaSoundで付けたInput名と同じ名前を指定してください。これで、プレイヤーが入ったときだけ、ドラムを加える指示が届きます。
出ていくときは0を送る
続いて Event ActorEndOverlap を追加します。こちらは相手が範囲から出たときのイベントです。入ったときと同じように、そのOther ActorとGet Player Characterを比較し、もう1つのBranchへつなぎます。

退出側 のBranchのTrueから、もう1つのSet Float Parameterを実行します。Targetは同じMusicAudio、In Nameも同じCombatIntensityで、In Floatだけを0.0 にします。

コンパイルして保存します。入ると1、出ると0を送るだけで、音量を少しずつ動かす仕事はMetaSound内のInterpToが担当します。
音を聞いて確かめる
エディタの試聴を停止してから、レベルを「Play」で実行します。まずは次の順で聞いてみてください。
- エリア外から開始する:探索パートだけが聞こえる。
- 中へ歩いて入る:ドラムが約2秒かけて加わる。探索パートは続いている。
- 外へ出る:ドラムが引き、探索パートだけになる。
- 何度か往復する:毎回曲の先頭へ戻らず、その続きを聞ける。数周待っても楽器同士のリズムが合っている。
慣れたらInterp Timeを0.2と3.0で比べてみましょう。すぐ反応させると戦闘の始まりが際立ち、ゆっくり重ねると緊張が高まる感じになります。同じ素材でも、フェードの長さで印象が変わり ます。

| つまずき | 最初に確認するところ |
|---|---|
| 何も聞こえない | MusicAudioのSoundとAuto Activate、Wave Asset、On Play、Mixerからグラフ出力への接続 |
| 最初からドラムが聞こえる | CombatIntensityの初期値が0か。Gain 1へInterpToのValueがつながっているか |
| エリアに入っても変わらない | 両側のGenerate Overlap Events、BattleAreaのPawn=Overlap、Branchまでの接続 |
| イベントは動くのに音が変わらない | Set Float ParameterのTargetがMusicAudioか。In NameとInput名が一致しているか |
| ドラムを加えるとリズムが合わない | 素材の開始位置・長さ、2つのWave PlayerのLoop設定、Pitch Shift |
| 往復するたび曲が戻る/二重に聞こえる | 出入りの処理にPlayやSpawn Soundを追加していないか。BP_MusicZoneを複数置いていないか |
おまけ:先に知っておくと良いこと
音量0と停止は別
この作りでは、Mixerでドラムの音量を0にしてもWave Playerは進み続けます。その分、聞こえていない層にも再生の処理が必要です。「何層までなら大丈夫」という固定の上限はなく、素材や実行環境で変 わります。まず2層で効果を確かめ、必要な楽器から増やしましょう。
BGM全体を設定画面などで無音にする場合は、MS_BattleMusicの「Virtualization Mode」を Play When Silent にすると、無音でも再生位置を進める用途に使えます。ただし、明示的なStopや同時発音数の制限まで防ぐ設定ではありません。
敵の発見をきっかけにするなら
エリアで動くことを確かめたら、次は AI Perception の発見・見失いをきっかけにできます。その場合も、すでにBGMを鳴らしているAudio Componentへ値を送る構成は同じです。
敵が複数いるゲームでは、「1体が見失ったから0」では早すぎることがあります。まだ別の敵と戦っているかもしれません。戦闘中の敵をまとめて数えるなど、ゲーム全体として戦闘が続いているか を決めてから、BGMへ1または0を送ります。
演出用の音量と、プレイヤーの音量設定
CombatIntensityは、曲の中でドラムをどれだけ出すかという演出用です。設定画面の「BGM音量」はBGM全体へかけるものなので、別に管理します。Sound ClassとSound Mix を使えば、ドラムの出入りを残したまま、BGM全体の大きさを調整できます。
まとめ
層を重ねるBGMでは、音楽を同時に進めておき、聞こえる量だけを変えます。素材の開始位置と長さをそろえ、On Playから2つのWave Playerを動かすところが土台です。
その上で、ドラムのGainをCombatIntensityで操作し、InterpToで滑らかに変えました。Blueprintが決めるのは「今ドラムを加えるかどうか」。まずはエリアを往復し、同じ曲の雰囲気が変わる感覚を確かめてみてください。
参考資料
- Epic公式:MetaSounds Quick Start — ステレオ出力、Mixer、Inputを使う手順
- Epic公式:MetaSound関数ノード — Wave Player、Mixer、InterpToの設定
- Epic公式:Blueprint Quick Start — 重なった相手の比較とBranch