Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Last active August 8, 2016 11:44
Show Gist options
  • Save yukpiz/9eefbd70252db46551624352e6480f73 to your computer and use it in GitHub Desktop.
Save yukpiz/9eefbd70252db46551624352e6480f73 to your computer and use it in GitHub Desktop.

Sound Manager in Unity

サウンドマネージャークラスを作成する際のクラス設計、サポート機能をまとめます。

1. 初期化処理

プラットフォームごとに異なるADX2 LEの初期化処理を吸収します。
PC、Android、iOSの初期化処理をサポートします。

//PC, Android, iOSで呼び出し処理を共通にする
// * シーンプログラマに初期化処理を意識させない
//   ゲームの起動時に1度インスタンス化され、ゲーム内ではどこからでもアクセスができる
// * Initialize()によるシングルトン化
// * どこからでもアクセスが可能
SoundManager.Initialize();

2. BGMの制御

シーンプログラマーが任意のタイミングでBGMの再生、停止ができます。

想定される利用パターン

  • シーンからシーンへの遷移
    • 同じBGMの再生を継続して行う(再生中のBGMを途切れさせない)
    • 違うBGMの再生に切り替える(元のBGMをフェードアウトし、次のBGMをフェードインさせる)
//BGMを再生した場合、明示的にStopBGM()が呼ばれるまで再生は継続する(ループ再生する)
//オプション引数によってフェードアウト、フェードインのディレイ時間を操作できる
//BGM再生枠は1つとし、BGM再生中に別のBGM再生が呼ばれた場合、フェードアウト=>フェードインを自動でやる
SoundManager.PlayBGM("サウンド名", 500);
SoundManager.StopBGM("サウンド名", 500);

3. SEの制御

シーンプログラマーが任意のタイミングでSEの再生、停止ができます。

//指定されたサウンドを1回再生し、再生が終わると停止します。
//再生途中に明示的にStopSE()を呼び出して停止させる事もできます。
//SE再生枠は上限はありません。SE再生中に被せて別のSEを再生できます。
//TODO: 同じSEを同時に再生した時、現状のStopSE()だとプレイヤーを特定できない
SoundManager.PlaySE("サウンド名");
SoundManager.StopSE("サウンド名");

4. ボイスの制御

5. なんか必要そうな気がしているやつ

  • プレイヤー設定がたくさんあるけど、使わない?
  • MusicEngineでアクセスできる音源の制御(BGM、SE、ボイスはMusicEngineは必要ない)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment