スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Unity備忘録] UnityでサウンドON/OFFを実装する方法

「くるくる迷路」 v1.1.0 に更新しました!

内容はパフォーマンス改善とバグ修正・・・
あと知人に指摘されたのでサウンドのON/OFFを実装しました。

というわけで今回やったサウンドON/OFFの実装方法を備忘録としてメモメモφ(.. )

具体的には2点

AudioListenerで全てのオーディオを消音(ミュート)
音声のON/OFF状態をPlayerPrefsに保存

▼AudioListenerで全てのオーディオを消音(ミュート)
Unityで全てのオーディオのボリュームを0(消音)にする手っ取り早い方法は AudioListener(オーディオリスナー)を使用すると楽そうです。

// リスナーのボリュームを 0 に設定
AudioListener.volume = 0f;

上記の1行はゲーム全体の音量を0に設定しています。
いわゆるマスターボリュームってやつですね!

上記の値は AudioListener コンポーネントの static なプロパティーです。
AudioListener のインスタンスは必要ありませんので注意してください。

AudioListener ってのはコンポーネントですがシーン上に一つしか配置してはいけません。
自前で作成しておく必要はなく、カメラオブジェクトを作成すると自動的にコンポーネントとして追加されています。

AudioListener(オーディオリスナー)とはその名のとおり音声の聞き手(リスナー)配置するためのコンポーネントです。
Unityのユーザーマニュアルでは「マイクのような機器」と表現されています。

ようは音声を拾ってくれる存在ですね。
2Dゲームだとわかりずらいですが3Dゲームでは音声も3D空間のあらゆる方向から聞こえるようになるため、カメラのようにどの位置で音声を聞くかが重要になってきます。
映像ではカメラを使いますが、音声(オーディオ)ではリスナーを使います。

音源がリスナーに対して左側にあれば音声は左から聞こえますし、リスナーからかなり遠くにあれば音声はとても小さく聞こえます。
カメラが「目」とするならリスナーは「耳」というわけです。

リスナーは特性上、位置と方向のパラメーターを持ちますが、これもカメラと同じ概念です。
そのためかUnityではシーン上にカメラを配置すると自動的にこの AudioListener コンポーネントが追加されて作成されるようです。

実はこの AudioListener 3D専用ってわけでもありません。
2D音源もこいつを使って音を拾われてるわけですが当然ながら位置やら方向やらっていうものには影響されません(されないと思いますたぶん;
とはいえ役にたつパラメーターもあります。先ほどのリスナーボリュームです。

てわけで無理やりまとめると AudioListener.volume を 0 にするとゲーム上で「耳」を完全に塞いだ状態になるということですね。(きっと
ちなみに AudioListener.volume の設定は AudioListener コンポーネントのインスタンスが破棄されてもリセットされません。
ON/OFFで使用する場合はどこかのタイミングで一回設定すればOKです。


▼音声のON/OFF状態をPlayerPrefsに保存
お次はON/OFFの状態をアプリを再起動しても継続させる方法ですが。
これには PlayerPrefs が最適かなと思いました。

詳しくは紹介されてるページが沢山あるので割愛します。
 ■[Unity][Unity3d]ゲームのスコア情報などを簡単に保存出来るPlayerPrefsクラス

気になるのはユーザーから丸見えの場所に保存されてしまううえ、テキストファイルなので閲覧可能、編集可能?ってところですが、今回のような環境設定情報にはデメリットでもなんでもありません(そもそもが環境設定用の機能っぽいですね・・・名称的にも

こいつを使ってさっきのリスナーボリュームを煮込むとこちら!

using UnityEngine;
using System.Collections;

public class AudioSwitch : MonoBehaviour
{
    void Awake()
    {
        if (PlayerPrefs.GetInt("Mute", 0) == 0)
        {
            AudioListener.volume = 1f;
        } else
        {
            AudioListener.volume = 0f;
        }
    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(30, 30, 200, 30), "サウンドON/OFF"))
        {
            if (PlayerPrefs.GetInt("Mute", 0) == 0)
            {
                AudioListener.volume = 0f;
                PlayerPrefs.SetInt("Mute", 1);
            } else
            {
                AudioListener.volume = 1f;
                PlayerPrefs.SetInt("Mute", 0);
            }
        }
    }
}

こいつを適当なオブジェクトにスクリプトとして追加すればOK。
画面に消音ON(or OFF)というボタンが表示されているはずです。

これでサウンドのON/OFFが可能になりました。

ボタンが押されると PlayerPrefs から "Mute" の名前で保存してある数値を取得して・・・

Mute が 0(無効)なら 1(有効)に変更してリスナーボリュームを 0(消音)
Mute が 1(有効)なら 0(無効)に変更してリスナーボリュームを 1(発音)

にしてあります。

アプリを起動し直しても前回の設定が引き継がれておりますヤッター(゚∀゚)

ちなみにON/OFFではなくリスナーボリュームの値そのものを保存すれば・・・
// マスターボリュームを取得
AudioListener.volume = PlayerPrefs.GetFloat("MasterVolume", 1f);
// マスターボリュームを保存
PlayerPrefs.SetFloat("MasterVolume", AudioListener.volume);
ミュートではなくゲームの音量調整にも応用できそうですね(あんま需要ないかな??

以上です!・・・なんか関係ないことグダグダ書いてしまった;;
次はもっとシンプルなメモを取ろうorz

目指せ自分で読み返したくなる文章!!(´▽`;)

※注意※
ちなみに・・・上記のソースコードでは Awake で PlayerPrefs を読み込んで最初にリスナーボリュームを初期化しています。
このスクリプトが起動後の最初の画面にないとデフォルトで音声は鳴ってしまうので注意..._〆(・∀・@)

この記事の内容はUnity4.3.4で確認したものです。
スポンサーサイト

テーマ : Unityゲーム制作
ジャンル : コンピュータ

コメントの投稿

非公開コメント

timeline
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。