複雑なゲームになってくると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というものを使えばいいみたいなのでまた機会があれば説明します。
コメント