11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Unity]BGMをシームレスに切り替える

Last updated at Posted at 2017-11-29

【マリオカート8】スカイガーデン 切り替わりBGM
http://www.nicovideo.jp/watch/sm24324337

こーいうのやるとき用のメモ。
マリカーでは雲の中に入った時に曲がスッと切り替わってました。カッチョイイ

再生デモ

こんな感じで、MixRateという変数で管理。実際にはゲーム内の状況を監視して切り替える別なマネージャーから操作するようにすべきかと。

実装

FrontBoundsObject.cs
using UnityEngine;

public class SwitchAudio : MonoBehaviour {
	[SerializeField]
	private AudioSource[] _audios;

	/// <summary>
	/// BGMの混ぜ具合。0ならSound1、1ならSound2になる
	/// </summary>
	[Range(0, 1)]
	public float _mixRate = 0;

	public void Play() {
		_audios[0].Play();
		_audios[1].Play();
	}

	private void Update () {
		_audios[0].volume = 1f - _mixRate;
		_audios[1].volume = _mixRate;
	}
}

 
▼コンポーネント設定はこんな感じ

キャプチャ.JPG

Sound1、Sound2にそれぞれAudioSouceコンポーネントを設定し、再生したいサウンドファイルを入れてます。
AudioSouceコンポーネントの取得方法や、AudioClipの設定方法は適宜カスタムという感じで(直接入れるのはダサいので)

※注意点1
AudioSouceコンポーネントはInspector上でどちらも「Play On Awake」を false にしてます。
Playメソッドを使って再生開始。Play On Awakeに任せると、読み込みで再生タイミングがズレそう。

課題点

1.負荷

2つのAudioSourceが常時再生されてるのは負荷的にアレだと思うので、せめてMixRateが 0 or 1 のときはもう一方のAudioSourceの再生を止めるべきかと
0 < MixRate < 1 のときは、再生中のAudioSourceの再生時間(time)を止めていたほうに反映して、すぐに同期を取るようにすれば大丈夫そう

2.3つ以上のAudio管理

AudioClipの参照を持たせておけば、AudioSouce2つのままで実現できそう。ただし、同時再生は2曲までで、切り替え対象を3つ以上、という仕様に限る。
実装する場合、1 or 0 のときに再生されてない方のAudioSourceに遷移対象のClipを設定する感じになるかと

こぼれ話

ストリートファイターVのBGM切り替え表現もやってみたい

ステージごとに6種類の曲が用意されていて、

・1ラウンド目
・1ラウンド目 - どちらかの体力が一定以下
・1ラウンド目終了(ME)
・2、3ラウンド目
・2、3ラウンド目 - どちらかの体力が一定以下
・決着(ME)

という感じで構成されてます。
それぞれ、記載してる状況になると自動的に曲が切り替わるんですが、クロスフェードではなく、曲の拍(テンポ)を見て良きタイミングで切り替わっていて、対戦開始~終わりまで一つの長い曲に錯覚するような仕組みになってます。

この動画の1試合目の滝ステージの曲が好き
https://youtu.be/v4MhhIMZKEo?t=25s

バラして並べてある動画上がってました
https://www.youtube.com/watch?v=u0-Szhv5B40

こういうのってCRIWAREとかにサクッと実装できる機能があったりするのかな・・・?
お手製でやるとしたらBPMをサウンドクリエイターから聞いて、条件を満たしていて、かつBPMから計算した"切り替えしてよい拍"でパッと切り替えるようにする感じになるかな

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?