複雑なゲームになってくると1シーンに複数のAudioSourceが存在するということもあると思います。
このような場合、ゲーム全体の音量調整やON/OFF切り替えの際に一つ一つのAudioSourceに対して設定するというのは大変ですよね。
そういうときはAudioListernerで全体の音量を制御すれば簡単です。
AudioListenerによる全体のサウンドのON/OFF
AudioListenerはデフォルトでMain Cameraにアタッチされており、ここから全ての音が出るようになっています。
このAudioListenerのvolumeプロパティをスクリプトで制御してシーン全体のON/OFFできるようにします。
今回は例としてSoundA、SoundBにはAudioSourceをつけてどちらからも音を連続で出すようにしました。
これら2つのオブジェクトから出るサウンドをAudioManagerというオブジェクトで管理することとします。
シーン全体のサウンドを管理するためにAudioManagerオブジェクトに以下のAudioManagerスクリプトをアタッチします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManager : MonoBehaviour
{
private bool isMuted = false;
public void ToggleMute()
{
isMuted = !isMuted;
if (isMuted)
{
AudioListener.volume = 0; // 音を完全にミュート
}
else
{
AudioListener.volume = 1; // 音を通常のボリュームに戻す
}
}
}
AudioManagerスクリプトをAudioManagerオブジェクトにアタッチ。
ボタンクリックでON/OFFを切り替える場合はボタンをシーンに追加し、このボタンがクリックされたときにToggleMuteを呼び出せばいいです。
ボタンのOnClick()イベントに、AudioManagerオブジェクトをドラッグ&ドロップし、「AudioToggle -> ToggleMute」を選択します。
これでボタンをクリックすれば、SoundA、SoundBから流れるサウンド両方のON/OFFが切り替わります。
まとめ
というわけでシーン全体の音のON/OFFの実装方法でした。
簡単なゲームの場合はこれで十分ですね。
特定の音源やカテゴリーのみをミュートするような高度な制御を必要とする場合はAudioMixerというものを使えばいいみたいなのでまた機会があれば説明します。
独学に限界を感じているあなたに
ゲーム制作に特化したプログラミングスクール「テックスタジアム」をご紹介します。
テックスタジアムは数あるプログラミングスクールでもゲームに特化しており、「完全オンライン」でUnity、3DCGを学ぶことができます。
また、第一線で活躍する講師に質問し放題。ゲーム業界への無料就職サポートも行っており、就職決定者には、授業料が全額返還される特典も。
オンラインで無料相談が可能なので、独学に限界を感じた場合は検討してみてください。
コメント