はじめに
この度はBGMをループする方法を探していました。
ただ基本機能にはそのような機能がなく、有料プラグインを入れたり皆さん工夫して実装されている様子。
そこで今回、簡易なプラグインを作成して共有することにしました。
プラグイン
ここにアップしています。
https://github.com/tada8/Unity-BgmManager
プロジェクトへの取り込みは
「BgmManager.unitypackage」をインポートするか
zipを落としてもらって「BgmManager」フォルダを直接Assetsフォルダに放り込んでもらっても大丈夫です。
機能
説明はざっくりとしたものとなりますが、基本的にはBGMや環境音(風の音など)に使う処理を管理するプレハブなどを用意しています。
基本的な機能としては下記となります。
- 指定したBGMへのクロスフェードでの移行(デフォルト0.5秒移行)
- BGMと環境音を並列して再生する
- 各音源でループを開始するポイントを指定する(秒指定)
ゲームを作る上で最低限必要なBGM管理機能となります。
利用手順
非常にシンプルですが
順を追って説明していきたいと思います。
データを用意
まず再生するためにデータを用意する必要があります。
Projectウィンドウで右クリックして
「Craete→MyGame→CreateMusicTable」を実行します。
すると再生に必要な情報を設定するファイルが出来るので
設定してファイルを作成してください。
各設定項目は下記のようになります。
Clip
再生するファイル
LoopBeginTime
ループポイントを指定する場合に設定(秒指定)
Volume
再生するボリューム(データ単位で微調整する時などご活用ください)
BGM管理プレハブを配置
では次は実際に再生していきます。
まず下記のプレハブをシーンに配置してください。
BgmManager/Prefabs/System/MusicManager.prefab
そして「BgmManager/SetDefaultBGM」を呼び出して
さきほど作成したサウンドデータを引数で渡してあげます。
これで一応音楽は再生されるはず。
またこれに別の音楽を指定するとクロスフェードして音楽が切り替わります。
余談
ここからは実装意図などを念の為記述しておきたいと思います。
不要な方は飛ばしていただいても大丈夫です。
ループ処理について
ループポイントについては基本的にOnUpdateでポーリングする形を取っています。
正直あまりきれいではないのですがイベントなどが見当たらなかったためできるだけシンプルな実装に敢えてしています。
BgmManagerの立ち位置
BgmManagerはあくまで複数のMusicManagerを管理するための
統括みたいなものです。
今回のケースだとBGMと環境音などのループ音源が同時再生されることを考慮してこのような実装になっています。
MusicManagerの実装について
来たリクエストをできるだけ処理するため
リクエストをプールして順次移行していく形を取っています。
実際の再生は2つのAudioSourceをクロスフェードさせているだけです。
注意点
ただあまり連続でリクエストするシチュエーションがあるとプール最大数分を越えてしまう可能性があるので注意が必要です。
開発ゲームのPR
話が変わりますが
主に共有している内容は現在開発中のゲームのものとなります。
もしよろしければ応援していただけますと嬉しいです。
終わりに
いかがでしたでしょうか?
こちらを使えば簡単なBGMの再生やループ再生などは利用できるようになります。
必要最低限しか要らない方が高いプラグインを買う必要はないと思いますのでぜひご活用いただけましたら幸いです。