(この記事の使用環境: Unity 2018.1.0b9 Personal、Visual Studio Community 2017, Windows10

シンプルなボリューム調整機能が欲しかったので作ってみた

キーボードのキー操作でAudioMixerのマスターボリュームを上げ下げできるようにする、シンプルなスクリプトを作ってみたので紹介します。

unityroom などで公開されているゲームをプレイしていて、「音量調整したい!」と思ったことはありませんか?ありますよね!私のPC環境はスピーカー音量を最小まで絞ってもけっこう大きな音が出てしまうので、ソフト側での音量調整機能が必須に近いのです。

でも開発者視点からだと、簡易なフリゲでいちいち音量調整用のUIを付けたりするのは面倒ですよね。そのためだけにメニュー画面とかポーズ画面を付けようかなとか考え出すとキリがないですしおすし(古語)。

というわけでシンプルなやつを作ってみました。設定したキーでゲームプレイ中いつでも音量の上げ下げができます。

これです

スクリプトはこんな感じ。
// AudioVolumeControlByKey.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

///<summary> 
///キーボード操作でAudioMixerのマスターボリュームを上げ下げする
///
/// 事前準備
///(1) ProjectビューでAudioMixerを作成する
///(2) AudioMixer編集画面でMasterを選択し、インスペクターの Volume を右クリックしてExpose to scriptする
///(3) AudioMixer > Exposed Parameters でExposeされたパラメーターを右クリックし、分かりやすい名前に変えておく
///(4) 各ゲームオブジェクトやプレハブにアタッチされたAudioSourceのOutputに、作成したAudioMixerを指定する
///(5) このスクリプトを適当なゲームオブジェクトにアタッチし、インスペクターで各項目を設定する
///
/// </summary>
public class AudioVolumeControlByKey : MonoBehaviour
{
    public KeyCode volumeDownKey, volumeUpKey;

    public enum VolumeControlSpeed { slow = 1, middle = 2, fast = 3 }
    public VolumeControlSpeed volumeControlSpeed = VolumeControlSpeed.middle;

    public AudioMixer audioMixer;
    public string targetParameter;  // AudioMixer > Master > Volume をExposeしたパラメーター名を指定する

    private const int MAX_VOLUME = 20, MIN_VOLUME = -40;


    private void Update ()
    {
        if ( Input.GetKey ( volumeDownKey ) || Input.GetKey ( volumeUpKey ) )
            AdjustVolume ();
    }


    private void AdjustVolume ()
    {
        float currentVolume;
        audioMixer.GetFloat ( targetParameter, out currentVolume );

        float adjustValue = (float) volumeControlSpeed * 0.1f;

        if ( Input.GetKey ( volumeDownKey ) )
            audioMixer.SetFloat ( targetParameter, Mathf.Clamp ( currentVolume - adjustValue, MIN_VOLUME, MAX_VOLUME ) );

        if ( Input.GetKey ( volumeUpKey ) )
            audioMixer.SetFloat ( targetParameter, Mathf.Clamp ( currentVolume + adjustValue, MIN_VOLUME, MAX_VOLUME ) );
    }
}

設定方法

スクリプト内の summary に書いたとおりです。
AudioMixer、AudioSourceの設定をしたうえで、このスクリプトを適当なオブジェクトにアタッチし、インスペクターの各項目を設定して使ってください。

png

参考資料

そもそもAudioMixerって何?って人は以下の記事が参考になるかも。(とりあえずPlayMakerを使うところの手前まで読めばOKかと)

参考:Unity5で脱オレオレAudioManager - Qiita


不明点などあればご連絡ください。

今回は以上です。