C#
Unity
Unity2017

Audioまとめ

概要

https://docs.unity3d.com/ja/current/Manual/AudioOverview.html

音を出す側

音を出すオブジェクトにスピーカー(AudioSource)をつけて、そこに音源(AudioClip)をセットする。

AudioSource
https://docs.unity3d.com/jp/current/Manual/class-AudioSource.html

AudioClip
https://docs.unity3d.com/jp/current/Manual/class-AudioClip.html

音を聞く側

AudioListenerを1シーンに1つ用意する。主にメインカメラがリスナーオブジェクトになる。

AudioListener
https://docs.unity3d.com/jp/540/Manual/class-AudioListener.html

参考
【Unity開発】Audioまとめ(基本編)【ひよこのエッセンス】
【Unity開発】Audioまとめ(3Dサウンド中心)【ひよこエッセンス】

オーディオファイル

https://docs.unity3d.com/ja/current/Manual/AudioFiles.html

基本的には非圧縮のwavファイルを使う

BGM / SE

BGM

  • 一般的に、途切れることはない
  • クロスフェードする可能性はある
  • 一般的に、Spatial Blendは2D設定

こちらのスクリプトが使ってみて便利だった
【Unity】とっても簡単に扱えるBGM再生クラスを作ってみた。フェードイン、フェードアウト対応版

その他
【Unity】Audioの基本と扱いについて

SE

  • 単発の音
  • 複数重なることがある
  • 一般的に、Spatial Blendは3D設定

Play / PlayOneShot

Play
https://docs.unity3d.com/ja/540/ScriptReference/AudioSource.Play.html

PlayOneShot
https://docs.unity3d.com/ja/540/ScriptReference/AudioSource.PlayOneShot.html

サンプルを見る限り、
BGMのように重複せずにシンプルに音を鳴らすのがPlay
SEのように重複することを前提に音を鳴らすのがPlayOneShot

AudioMixer

https://docs.unity3d.com/jp/current/Manual/AudioMixer.html

解説:チュートリアル > Audio > オーディオミキサーとミキサーグループ

まずミキサーをつくると、デフォルトでMasterを親としたグループがつくられる。その下に操作したい音ごとにグループをつくっていく。(Masterで操作した値はすべてのグループに影響を与える)

スクリーンショット 2017-10-27 7.06.31.png

上記の画像は、ポーズ画面になったらAttenuation(減衰)を下げているスナップショットを登録しているところ。スナップショットとは、ミキサー内で設定した値などをアセットのような形で登録できるもの。

解説:チュートリアル > Audio > オーディオミキサースナップショット

各グループの「B」ボタンは「バイパス」。オーディオグループにエフェクトをかけるか設定できる。

スクリーンショット 2017-10-27 7.16.37.png
スクリーンショット 2017-10-27 7.16.23.png

作成したグループをAudioSourceのOutputに設定してあげることで、ミキサーを通して出力することができる。

ポーズ画面の表示・非表示でスナップショットを切り替える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class MenuManager : MonoBehaviour {

    public AudioMixerSnapshot paused;
    public AudioMixerSnapshot unpaused;

    Canvas canvas;

    void Start () {
        canvas = GetComponent<Canvas> ();
    }

    void Update () {
        if (Input.GetKeyDown (KeyCode.Escape)) {
            ToggleMenu ();
        }
    }

    void ToggleMenu() {
        canvas.enabled = !canvas.enabled;
        // 時間依存で動いているものは止まる
        Time.timeScale = Time.timeScale == 1 ? 0 : 1;
        // スナップショットを切り替える
        if(Time.timeScale == 0){
            unpaused.TransitionTo(.01f);
        } else {
            paused.TransitionTo(.01f);
        }
    }

}

参考
Unityのオーディオミキサーを使って音声の変換や音量を変更する
Unityの一時停止で止まるもの、止まらないもの【Time.timeScale】

Ducking

ある音が再生された場合、他の音にエフェクトをかけたり音量を下げたりすること

解説:チュートリアル > Audio > Duck Volume オーディオエフェクト

ex. 銃撃した時に少しだけBGMが下がる

SEにSend、BGMにDuck Volumeを設定。
SEの音がThresholdを超えた時にBGMが少し下がっている。

duck.gif

参考
Unity 5のサウンド再生機能について(2)音にエフェクトを付与する方法について