BGMの切り替えやフェードが上手くいかず、戦闘の盛り上がりを作れない――そんな悩みはありませんか?
BGMを「どう鳴らすか」を設計すると、緊張感や達成感が大きく変わります。フェード、セグメント分割、パラメータ制御を押さえて、演出力を上げましょう。
✨ この記事でわかること
- BGMフェードの実装
- セグメント分割による自然な切り替え
- 戦況に応じたリアルタイムミキシング
- パラメータ駆動型オーディオの設計

音は「感情のガイド役」です。仕組みから整えると演出の引き出しが増えます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
BGMフェードの基本実装

押さえておきたいポイントは「重ねてフェード」させることです。
急な停止は違和感を生みます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class BgmFader : MonoBehaviour { [SerializeField] private AudioSource currentSource; [SerializeField] private AudioSource nextSource; [SerializeField] private float fadeTime = 1.5f; public void CrossFade(AudioClip nextClip) { nextSource.clip = nextClip; nextSource.volume = 0f; nextSource.Play(); StartCoroutine(FadeRoutine()); } private IEnumerator FadeRoutine() { float t = 0f; float startVol = currentSource.volume; while (t < fadeTime) { t += Time.deltaTime; float ratio = t / fadeTime; currentSource.volume = Mathf.Lerp(startVol, 0f, ratio); nextSource.volume = Mathf.Lerp(0f, startVol, ratio); yield return null; } currentSource.Stop(); (currentSource, nextSource) = (nextSource, currentSource); } } |
クロスフェードにするだけで、戦闘開始・勝利時の遷移が滑らかになります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
セグメント分割で自然に切り替える

曲を「イントロ/ループ/ブレイク」のセグメントに分け、小節境界で切り替えます。
見落とされがちなのが小節長の管理です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class MusicConductor : MonoBehaviour { public float bpm = 120f; public int beatsPerBar = 4; public event Action OnBar; private double nextBarTime; void Start() { double dspStart = AudioSettings.dspTime; double barLen = 60.0f / bpm * beatsPerBar; nextBarTime = dspStart + barLen; } void Update() { double dsp = AudioSettings.dspTime; if (dsp >= nextBarTime) { OnBar?.Invoke(); nextBarTime += 60.0f / bpm * beatsPerBar; } } } |
バーイベントに合わせてクロスフェードを始めれば、拍に同期した違和感のない切り替えができます。
戦況に合わせたリアルタイムミキシング

「緊張度」をパラメータにし、ストリングスやパーカッションのレイヤー音量を動的に変えます。
| パラメータ | 算出例 | ミックス例 |
| 緊張度 | 敵残数 / 初期敵数 | 高いほどドラム音量↑ |
| 優勢度 | 味方HP合計 / 敵HP合計 | 優勢なら明るいパッドをフェードイン |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public class BattleMusicMixer : MonoBehaviour { [SerializeField] private AudioSource drumLayer; [SerializeField] private AudioSource padLayer; public void UpdateMix(float tension, float advantage) { drumLayer.volume = Mathf.Lerp(0.3f, 0.9f, tension); padLayer.volume = Mathf.Lerp(0.9f, 0.4f, advantage); } } |
パラメータ駆動にすることで、コードはシンプルなままリッチな演出を付けられます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ:BGM制御実装のチェックリスト
- クロスフェードで滑らかな遷移を作る
- 小節境界に合わせてセグメントを切り替える
- 戦況パラメータでレイヤー音量を動的に調整する
- 本番・開発ビルドでデバッグUIを切り替える
BGMは「空気」を決める最重要要素です。まずはフェードとセグメント化から導入し、パラメータ駆動で一段上の演出を目指しましょう。実践的に学びたい方は「Unity入門の森」の講座も活用してください。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント