【UE5】BGMを途切れさせない!プレイリスト形式の連続再生ロジック構築ガイド

query_builder 2025/10/25
ブログ
スクリーンショット 2025-10-25 024730

 ゲームの世界観を彩るBGM。せっかくマーケットプレイス(Fab)で最高のBGMアセットを手に入れたのなら、最高の形でプレイヤーに届けたいですよね。今回は、複数のBGMをプレイリストのように、途切れなく連続再生させるブループリントロジックをご紹介します。

今回実装するBGM再生システムの仕様

まずは、どのような機能を目指すのかを明確にしておきましょう。

項目 条件
目的 BGMをシームレスに連続再生する。
BGMファイル 複数のSound Cueアセット(今回は10曲を想定)をプレイリストとして使用する。
再生ルール 1. 最初の曲はプレイリストからランダムに選択。
2. 2曲目以降はプレイリストの順番通りに再生し、最後までいったら最初に戻る。
実装場所 Level Blueprintに実装します。
再生の継続 曲の終了を自動で検知し、次の曲へスムーズに移行させます。

【注意】
この実装はレベルブループリントで行うため、レベルを移動するとBGMは停止します。ゲーム全体でBGMを継続させたい場合は、Game Instanceへの実装が推奨されます。


Step 1: 必要な変数を準備しよう

最初に、ロジックの土台となる変数を3つ作成します。BGMを再生したいレベルのLevel Blueprintを開いて、以下の変数を追加してください。

変数名 解説
BGMPlaylist Sound Cue (Object Reference) の配列 再生したいBGMアセットをすべて格納するプレイリスト本体です。
CurrentTrackIndex Integer 現在再生している曲が、プレイリストの何番目かを記憶しておくための変数です。
PlayingBGM Audio Component (Object Reference) 現在再生中のAudio Componentそのものを保持します。手動で破棄するために必須の変数です。

Step 2: 再生開始のきっかけを作る (Event BeginPlay)

レベルが始まった瞬間に、プレイリストからランダムで選んだ最初の1曲を再生する処理です。

  1. Event BeginPlay ノードから処理を開始します。
  2. BGMPlaylist変数をグラフにドラッグ&ドロップし、そこから Get (a copy)Last Index を繋いだ Random Integer in Range ノードでランダムなインデックスを取得します。
  3. 取得したランダムなインデックスを CurrentTrackIndex 変数にセットします。
  4. 後述するカスタムイベント StartBGM を呼び出します。

これで、レベルが開始されるたびに毎回異なる曲からBGMがスタートするようになります。


Step 3: BGM再生と「曲の終わり」を予約する (Custom Event: StartBGM)

このカスタムイベントが、BGM再生ロジックの心臓部です。指定された曲を再生し、その曲が終わったタイミングで次の処理へ移るための「予約」を行います。

  1. StartBGM という名前でカスタムイベントを作成します。
  2. 【重要:メモリリーク対策】
    まずPlayingBGM変数が有効か Is Valid でチェックします。もし有効(つまり、前に再生されていた曲のAudio Componentが残っている)なら、Destroy Component ノードで明示的に破棄します。これを怠ると、見えない音源がどんどん溜まっていくので注意しましょう。
  3. BGMPlaylist配列からCurrentTrackIndexを使って再生すべきSound Cueを取得し、Spawn Sound 2D ノードで再生します。
  4. 【最重要ポイント】
    Spawn Sound 2Dノードの詳細パネルを開き、Auto Destroy のチェックを外します。 これがONだと、再生終了時にAudio Componentが自動で破棄されてしまい、終了イベントを検知できなくなります。
  5. Spawn Sound 2Dの戻り値(生成されたAudio Component)を、PlayingBGM変数にセットして保持します。
  6. PlayingBGM変数から Assign On Audio Finished ノードを繋ぎます。これは「再生が完了したら、指定したイベントを呼び出す」という予約処理です。イベントピンに、次のステップで作成するカスタムイベントOnAudioFinished_Eventを接続します。

Step 4: 次の曲へバトンを繋ぐ (Custom Event: OnAudioFinished_Event)

Assign On Audio Finishedによって曲の終了時に自動で呼び出されるイベントです。次の曲のインデックスを計算し、再びStartBGMを呼び出すことで、音楽をループさせます。

  1. OnAudioFinished_Event という名前でカスタムイベントを作成します。
  2. CurrentTrackIndex変数を IncrementInt ノードで +1 します。
  3. 次に、Modulo(剰余)ノードを使います。IncrementIntの結果を、BGMPlaylistLength (配列の要素数)で割った余りを計算し、これを新しいCurrentTrackIndexとしてセットします。
    • Modulo演算の役割: これにより、インデックスがプレイリストの最大数を超えた瞬間に0に戻るため、最後の曲が終わったら自然に最初の曲へループさせることができます。
  4. 最後に、カスタムイベント StartBGM を呼び出します。これにより、更新されたCurrentTrackIndexの曲が再生され、再び再生終了が予約される…というサイクルが完成します。
最終的なBPのSS

💡 発展:レベルを移動してもBGMを止めない方法

今回の実装はLevel Blueprintに記述したため、他のレベルに移動するとBGMは止まってしまいます。

もし、ステージ遷移後も同じBGMを継続させたい場合は、このロジック全体をGame Instanceに実装しましょう。 Game Instanceはゲームの起動から終了まで永続するオブジェクトなので、レベルをまたいで情報を保持するのに最適です。

まとめ

お疲れ様でした!以上の手順で、シンプルながらも効果的なBGM連続再生システムが完成しました。

  • Event BeginPlay で最初の曲をランダムに決定
  • StartBGM イベントでBGMを再生し、終了イベントを予約
  • OnAudioFinished イベントで次の曲へインデックスを進め、再び StartBGM を呼ぶ

この仕組みを応用すれば、ボスの出現でプレイリストを切り替えたり、特定のエリアに入ったら別のBGMセットを再生したりと、よりインタラクティブなサウンド演出が可能です。ぜひ、あなたのゲームに最高の音楽体験を実装してみてください!

記事検索

NEW

  • 【UE5】BGMを途切れさせない!プレイリスト形式の連続再生ロジック構築ガイド

    query_builder 2025/10/25
  • 【UE5】レベル上のアクターを確実にリセットする方法 - サブレベルとChildアクターの落とし穴に注意!

    query_builder 2025/10/15
  • 5期目を迎えた株式会社PoisonGamesは今...

    query_builder 2025/08/03
  • メックネストの記事を作成していただきました♪

    query_builder 2025/03/04
  • 株式会社PoisonGamesが本日4期目を迎えました!

    query_builder 2024/08/05

CATEGORY

ARCHIVE