2015年3月1日日曜日

【Unity】とっても簡単に扱えるBGM再生クラスを作ってみた。フェードイン、フェードアウト対応版

こちらの記事(【Unity】AudioManagerクラスを作ろう)の改良版です。

上記記事ではBGMの再生はできましたが、BGM切り替えがスムーズではありませんでした。また、オーディオファイルをインスペクタ上から一つ一つセットしなければいけないなど、いろいろと不満が残っていました。

それらを解消すべく作り直してみたので紹介します。

ダウンロード

UnityPackage

手っ取り早く使いたい方はこちら。
https://github.com/naichilab/Unity-BgmManager/archive/master.zip

ソースコード

GitHubで公開してます
https://github.com/naichilab/Unity-BgmManager

これ以降は使い方の説明とかです。

やりたいこと

  • BGMを再生できること。
  • とにかく簡単に扱えること。
  • BGMのフェードイン、フェードアウトに対応すること。
    • フェードインとは:音量0からゆっくり大きくなっていくこと
    • フェードアウトとは:音量がゆっくり小さくなっていくこと
  • BGMのクロスフェードに対応すること。
    • クロスフェードとは:フェードアウトとフェードインを組み合わせてBGM切り替えを行うこと
  • フェード時間とかを調整できること。
意識したのはこれくらい。
とりあえずBGMだけです。
SEについてもそのうち作ろう。

サンプル


Hosted by UnityRoom.com
PlayボタンでBGM再生開始。
他のBGMへ切り替える際、少し重なって聞こえると思います。これがクロスフェード。
(Playを押してから音が出るまでにちょっと時間があるので分かりづらいかな?)

使い方

Unityプロジェクトを開く

新規Projectでも既存のProjectでもなんでもOK

BgmManagerのダウンロード

https://github.com/naichilab/Unity-BgmManager
こちらのURLにある”Download ZIP”ボタンからダウンロード


BgmManagerのインポート

ZIPファイルを解凍して出てくる
BgmManager.unitypackageをダブルクリックしてUnityに取り込む
サンプル不要ならチェックを外してください。
※サンプルに同梱したmp3ファイルはSHW様(http://shw.in/)提供のものです。

サンプルの実行

SampleフォルダにあるSampleシーンを開きます。
HierarchyビューにBgmManagerが配置されていれば準備完了です。
実行してBGMを再生できる事を確認してください。

サンプルを実行するだけならこれで終わり。これ以降は各自用意されたBGMファイルを再生する方法と、スクリプトからの呼び出し方法の解説です。

BGMファイルの追加

BGMファイルは下記フォルダに存在するものが自動的に読み込まれます。
・Resources
 ┗Audio
  ┗BGM
(Resourcesフォルダはどの階層にあっても大丈夫です。)

フェードパラメータの調整

BgmManagerにはいくつかのパラメータがあります。

  • Debug Mode
    • ONにするとサンプル実行と同じように簡易ウィンドウが表示されます。
  • Target Volume
    • フェードイン完了時の音量です。
  • Time to Fade
    • フェードイン(アウト)の開始〜完了までの時間です。
  • Crossfade Ratio
    • クロスフェードの重なり率を指定します。
      • 0を指定した場合、フェードアウト完了を待ち、フェードインが開始されます。
      • 1を指定した場合、フェードアウトとフェードインが同時に開始されます。

スクリプトからの再生・停止

すきなスクリプトから下記1行でBGMを再生できます。
BgmManager.Instance.Play ("BGMファイル名");
すでに別の曲が再生中の場合は、勝手にクロスフェード再生します。

停止する場合は下記いずれかを呼び出します。
//フェードアウト後、停止います。
BgmManager.Instance.Stop ();
//ただちに再生を停止します。
BgmManager.Instance.StopImmediately ();


スクリプトからパラメータの変更

こんな感じ。
BgmManager.Instance.DebugMode = false;
BgmManager.Instance.TargetVolume = 0.8f;
BgmManager.Instance.TimeToFade = 3.0f;
BgmManager.Instance.CrossFadeRatio = 0.5f;
再生・停止と一緒ですね。

参考サイト



サンプルファイル提供


その他

フェードイン(アウト)は直線的な補間しかしてないですし、インアウトをそれぞれ別の長さにすることもできないです。
まぁとにかく簡単に使える物を目指したので今後も実装する事は無いかな…

是非使ってみてください〜。



Unity系記事まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...