【Unreal Engine】戦闘エリアに入るとドラムが加わる:MetaSoundsで作る動的BGM

作成: 2026-07-25最終更新: 2026-09-06

探索中の穏やかなBGMに、戦闘エリアへ入るとドラムが加わる演出を作ります。音楽を層に分ける考え方、素材のそろえ方、MetaSoundsでの同時再生とフェード、Blueprintから音量を変える接続を図解します。

探索中は穏やかな音が流れ、戦闘に入るとドラムが加わる。戦いが終わればドラムが引き、元の静けさへ戻る。曲を最初からかけ直さずにこんな変化を付けられると、同じマップでも場面の緊張感が伝わります。

今回は 同じ曲を楽器ごとの「層」に分け、聞こえる層を増減させるBGM を作ります。MetaSoundsで2つの音を同時に再生し、Blueprintからドラムの音量を変える構成です。実践では戦闘エリアへの出入りをきっかけにするので、敵AIを用意せずに音の変化を試せます。

探索の音を土台に、ドラムや弦の層を重ねて曲の厚みを変える

この記事でわかること

  • 曲を切り替える方法と、楽器を重ねる方法の違い
  • 途中から重ねてもリズムが合う素材の用意
  • MetaSoundsでの同時再生と、音量の滑らかな変化
  • 戦闘エリアに入るとドラムが加わり、出ると消える仕組み

MetaSounds入門 のWave PlayerとInputを使います。まだ触っていなければ、先に音を1つ鳴らしてみてください。実践はUE5のThird Personテンプレートで、プレイヤー1人を動かす想定です。

Sponsored

BGMを層として考える

完成したBGMファイルには、メロディ、ドラム、ベースなどの音がまとめて入っています。そのまま再生するだけでは、「今はドラムだけを引く」という操作はできません。そこで、あらかじめ楽器のまとまりごとにファイルを分けておきます。

この重ね合わせる音のまとまりを レイヤー(層) と呼びます。たとえば、穏やかな伴奏を土台にして、戦闘ではドラム、ボス戦ではさらに力強い弦の音を足す、という使い方です。

探索では土台だけ、戦闘ではドラムや緊迫の層も聞こえる

ここで大切なのは、聞こえていない層も、裏では再生し続ける ことです。探索パートが曲の半分まで進んだとき、ドラムも同じ場所まで進んでいれば、音量を上げるだけでその続きを重ねられます。戦闘に入ってからドラムを曲の先頭から再生すると、フレーズの位置が合わなくなります。

つまり、「別の曲に切り替える」というより 「同じ曲の厚みを変える」 演出です。実践は、違いを聞き取りやすい探索パートとドラムの2層から始めましょう。

縦の重ねと横の遷移

状況に反応する音楽には、層を重ねる方法のほかに、曲そのものを入れ替える方法もあります。

楽器を重ねる方法と、曲の区切りで別の曲へ移る方法の比較
方法変えるものゲームでの例
縦の重ね(レイヤリング)同じ曲の楽器の組み合わせ敵に気づかれるとドラムが加わる
横の遷移(トランジション)曲やフレーズそのものフィールド曲からボス専用曲へ移る

今回は縦の重ねを使います。素材をそろえて同時に再生しておけば、場面が変わったときに操作するのは音量だけです。土台の音が続いているので、音楽を途切れさせずに雰囲気を変えられます。

横の遷移では、すぐに曲を替えるのか、今のフレーズが終わるまで待つのか、といった切り替え方も決めます。「別の曲へ移る演出」が必要になったときに考えると、役割を整理しやすいでしょう。

素材の開始位置と長さをそろえる

用意するのは、同じ曲から分けた次の2ファイルです。どちらもステレオ、つまり左右2チャンネルの音が入ったWAVにします。

UEへ取り込んだ後の名前中身
SW_Explore穏やかな伴奏。長く伸びる音など、ドラムがなくても聞ける土台
SW_Combatその伴奏に合わせて作ったドラム

作曲ソフト(DAW)を使うなら、同じ曲の中でこの2つのパートを作り、片方ずつ書き出します。このようなパート別の素材は ステム(Stem) とも呼ばれます。素材集を使う場合も、同じ曲のステムがそろっているものを選ぶと扱いやすくなります。

探索とドラムを同じ開始位置から16秒で書き出し、先頭の無音も残す

書き出す範囲は、開始位置も終了位置も同じ にします。たとえば120 BPMの4拍子で8小節なら、2つとも曲の先頭から16秒間です。BPMは1分間の拍数、拍は「1、2、3、4」と数えるリズムの刻み。4拍子では4拍で1小節なので、この例では1小節が2秒になります。

ドラムが途中から入る素材でも、先頭の無音を切り詰めないでください。その無音も、伴奏と位置を合わせるための時間です。末尾もそろえ、どちらも同じ地点へ戻って自然にループするようにします。

まずDAW上で2つを重ね、数周聞いてリズムやつなぎ目を確認しましょう。同じテンポというだけで、無関係な2曲が合うわけではありません。フレーズの位置や和音も合う素材を使います。

MetaSoundsで2つの層を鳴らす

最初はBlueprintとつながず、MetaSoundエディタだけで音を確かめます。

再生用アセットを作る

  1. 2つのWAVをコンテンツブラウザへ取り込み、SW_ExploreSW_Combat にします。
  2. コンテンツブラウザで右クリックし、「オーディオ」から MetaSound Source を作成。名前を MS_BattleMusic にします。見つからない場合は「編集」→「プラグイン」でMetaSoundを有効にします。
  3. アセットを開き、「Interfaces」で UE.Source.OneShot を外します。今回は一度鳴って終わる音ではなく、再生を続けるBGMです。
  4. ツールバーの「MetaSound」を選び、詳細の Output FormatをStereo にします。グラフの出力が Out LeftOut Right になったことを確認します。

同じ合図で再生を始める

グラフへ Wave Player (Stereo) を2つ置き、それぞれの「Wave Asset」に対応するSound Waveを指定します。2つとも「Loop」をオンにし、次の設定をそろえてください。

設定2つに入れる値意味
Pitch Shift0音の高さと再生速度を変えない
Start Time0ファイルの先頭から開始する
Loop Start0ループ時も先頭へ戻る
Loop Duration-1ファイルの末尾までをループ範囲にする
1つのOn Playから2つのStereo Wave PlayerのPlayへ接続する

グラフの On Playから、両方のWave PlayerのPlayへ 線をつなぎます。On Playは「このMetaSoundの再生を始めた」という合図です。同じ合図を2つへ渡すことで、そろえた素材を同時にスタートさせます。

左右の音をMixerへ集める

次に Stereo Mixer (2) を追加します。Mixerは複数の音を混ぜるノードで、ここでの「(2)」は2組のステレオ音を受け取るという意味です。

探索とドラムの左右をStereo Mixerへ入れ、左右の音声出力へつなぐ

次の順に、左右を分けてつなぎます。図は音の線に絞っていますが、先ほどのOn Playの接続は残してください。

出力元接続先
探索側Wave PlayerのOut Left / Out RightMixerのIn 0 L / In 0 R
ドラム側Wave PlayerのOut Left / Out RightMixerの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つを混ぜると全体の音量も上がります。まず小さな試聴音量で聞き、音が割れる場合は素材側の音量を下げてください。

Sponsored

ドラムだけを滑らかに出し入れする

今はGainを直接変更しています。次はゲーム側から操作するための Input を作ります。Inputは、このMetaSoundが外から値を受け取る入口です。

  1. Mixerの「Gain 1 (Lin)」からドラッグし、InterpTo を追加します。その「Value」がGain 1へつながるようにします。
  2. InterpToの Interp Timeを2.0 にします。
  3. InterpToの「Target」からドラッグして「Promote to Graph Input」を選びます。
  4. 作成したInputを選び、詳細の「Input」を CombatIntensity に変更。型はFloat、初期値は 0 にします。「Is Constructor Pin」はオフにして、再生中にも変更できる入力にします。
CombatIntensityからInterpToを経由してドラムのGainを変える

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を用意する

  1. 親クラスをActorにしてBlueprintを作り、BP_MusicZone と名付けます。
  2. 「コンポーネントを追加」で Box Collision を追加し、BattleArea にします。これは、プレイヤーが重なっているかを調べる箱型の範囲です。
  3. 同じActorに Audio コンポーネントを追加し、MusicAudio にします。こちらがBGMの再生を担当します。
BP_MusicZoneが判定範囲BattleAreaと再生部品MusicAudioを持つ

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 ExtentX=400、Y=400、Z=200
Collision PresetsCustom
Collision EnabledQuery Only
Collision Responsesいったん全てIgnoreにして、PawnだけOverlap
Generate Overlap Eventsオン

Overlapは、ぶつかって止めるのではなく「重なったことを知らせる」設定 です。Third PersonキャラクターのCapsule Componentも「Generate Overlap Events」をオンにします。キャラクターの移動用コリジョンは、そのまま使ってください。

MusicAudioは次のように設定します。距離で音が変わる効果と、ドラムが増減する効果を混同しないよう、今回はBGMをどこでも同じように聞こえる音にします。

MusicAudioの設定
SoundMS_BattleMusic
Auto Activateオン
Volume Multiplier0.35から試す
Pitch Multiplier1.0
Allow Spatializationオフ
Attenuation SettingsNone
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から、入ってきた相手を受け取れます。

ActorBeginOverlapのOther Actorとプレイヤーを比較し、結果をBranchへ渡す
  1. Other Actorからドラッグして Equal (Object) を追加します。グラフ上では == と表示される比較ノードです。
  2. Get Player Character を追加し、Player Indexを0にします。そのReturn Valueを、比較ノードのもう片方の入力へつなぎます。
  3. Branch を追加。比較結果の赤い線を「Condition」へ、ActorBeginOverlapの白い実行線をBranchの実行入力へつなぎます。

Equal (Object)は 「この2つは同じ相手か」 を調べます。ここでは、入ってきたActorと、操作中のプレイヤーが同じならTrueです。Branchはその結果で処理を分けるので、Trueの先にドラムを加える処理を書きます。Falseは何もつながず、プレイヤー以外は無視します。

再生中のMusicAudioへ1を送る

「コンポーネント」一覧のMusicAudioをグラフへドラッグして、参照ノードを置きます。これは このActorが持っている、今BGMを鳴らしている部品 を指定するものです。

入る側のBranchのTrueから、MusicAudioへCombatIntensityの1を送る
  1. MusicAudioの青い出力からドラッグし、Set Float Parameter を追加します。MusicAudioが「Target」へつながったことを確認します。
  2. 先ほどのBranchの True を、Set Float Parameterの実行入力へつなぎます。
  3. 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へつなぎます。

ActorEndOverlapでも出た相手とプレイヤーを比較する

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

出る側のBranchのTrueから、同じMusicAudioへCombatIntensityの0を送る

コンパイルして保存します。入ると1、出ると0を送るだけで、音量を少しずつ動かす仕事はMetaSound内のInterpToが担当します。

Sponsored

音を聞いて確かめる

エディタの試聴を停止してから、レベルを「Play」で実行します。まずは次の順で聞いてみてください。

  1. エリア外から開始する:探索パートだけが聞こえる。
  2. 中へ歩いて入る:ドラムが約2秒かけて加わる。探索パートは続いている。
  3. 外へ出る:ドラムが引き、探索パートだけになる。
  4. 何度か往復する:毎回曲の先頭へ戻らず、その続きを聞ける。数周待っても楽器同士のリズムが合っている。

慣れたら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が決めるのは「今ドラムを加えるかどうか」。まずはエリアを往復し、同じ曲の雰囲気が変わる感覚を確かめてみてください。

参考資料

Unreal Engine このセクションのノート98