ADX for Unityで音量コンフィグを実装

# はじめに
ゲームサウンドの実装において、およそ避けられないのが音量コンフィグかと思います。プレイヤーがスピーカーで調整出来るとはいえ、他のアプリ（ゲームに限らず）との兼ね合いを考えるとゲーム内に実装してあげたいですね。動画配信者がBGMやボイスを控えめにしたい、といった需要もあるかもしれません。
Unityの標準機能で実装する場合、Audio Mixerを使うことになります。音源ではなくAudio Sourceごとに音量を調節することになるため、小規模な状態では簡単に実装できますが、規模が大きくなるにつれどのオーディオソースを使うか気を使うことになり管理が大変です。
そこでADXを使って解決しましょう。ADXでは、音データにカテゴリ情報を埋め込めます。たとえばこの音はBGM、これはセリフ、これは効果音といったようにです。タグ付けをイメージするとわかりやすいです。カテゴリごとにボリューム設定ができるため、再生時に気を使う必要がなくなります。
本記事では、BGM・SE・UIの３カテゴリ毎に調整出来る音量コンフィグ画面の作り方を解説します。

この記事は「ADX2 for UE4で音量コンフィグを実装」のUnity版です。元記事作者のSigさん ( https://qiita.com/SigRem )の許可を得て作成しています。

[https://qiita.com/SigRem/items/d30add04ff9a254b8aa4](https://qiita.com/SigRem/items/d30add04ff9a254b8aa4)

### 動作確認環境

Windows 10 Home 20H2
Unity 2020.3.27f1  + ADX LE Unity SDK 3.06.03
CRI ADX LE Tools for Windows 3.46.02

### 前提記事

CRI ADXの導入方法や基本的な操作については、以下の記事を参照して下さい。

Unityのサウンド機能をADXで強化する

[https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377](https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377)

# AtomCraftを使い、サウンドをカテゴリごとに分ける
まずは、再生する音データの作成を行います。ADXにおいては、再生用のデータはUnityとは別のツール「AtomCraft」を使います。その手順については、元の記事（UE4向け記事）の同名の項と同じになりますので省略しています。
本記事の手順を試す場合は、まず元の記事の[該当項目](https://qiita.com/SigRem/items/d30add04ff9a254b8aa4#atomcraft%E3%82%92%E4%BD%BF%E3%81%84%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E3%82%92%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%94%E3%81%A8%E3%81%AB%E5%88%86%E3%81%91%E3%82%8B)を進めてから本記事を進めてください。
UE4版との違いとして1点、「Atomキューシートバイナリのビルド」画面で、一番左下のオプション「UnityAssets出力」にチェックを入れるのを忘れないようにして下さい。
またカテゴリの設定をするインスペクターの表示が変わっているので、以下の画像を参考にして設定して下さい。

![カテゴリの設定箇所](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/f86bb797-4581-dc76-4394-49860bea8657.png)

## Unityへのインポート

Unityを起動し、任意のフォルダにアセットをインポートします。「CreateGameObject」でシーン上に配置し、「Preview」で各サウンドが再生されるかチェックしておきます。

![インポートしたデータのプレビュー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/a2f70514-65ee-b2e8-805a-53c3d74d9cab.png)


### uGUIでUIを作成

サウンドコンフィグ画面として、各カテゴリそれぞれに対し、ボリュームを設定するスライダーと再生テストをするためのボタンを作ります。「BGM」「SE」「UI」と名付け、以下の設定をそれぞれに行います。

![サンプルシーンの完成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/45164aca-1040-fa89-5c3b-b438dd8d92aa.png)

以下のスクリプトを作成しアタッチします。

```AudioPlayTest.cs 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AudioPlayTest : MonoBehaviour
{
    public CriAtomSource bgmCriAtomSource;
    public string categoryName;
    private Slider slider;

    private void Start()
    {
        slider = GetComponentInChildren<Slider>();
    }

    public void PlaySound()
    {
        if(bgmCriAtomSource.status == CriAtomSource.Status.Playing)
        {
            bgmCriAtomSource.Stop();
        }
        else
        {
            bgmCriAtomSource.Play();
        }
    }

    public void SetVolume()
    {
        CriAtom.SetCategoryVolume(categoryName, slider.value);
    }
}
```

アタッチしたAudioPlayTestのBgmCriAtomSourceにCriAtomSourceを設定します。CategoryNameにはAtomCraftで設定したカテゴリ名を記入します。

![AudioPlayTestの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/fc9607e4-7752-36e5-6a78-cc0b227f3022.png)

次に各SliderのOnValueChangedにSetVolumeを設定します。

![スライダーの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/dd994bc9-c1a6-1ec4-5aab-88e716d11546.png)

最後に、各ButtonのOnclickに、上記のPlaySoundメソッドを設定します。

![ボタンの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/3380c034-c336-3d0d-ed87-54897b8d8039.png)

これで設定は完了です

実行し、ボタンで再生・停止、スライダーで個別に音量調整できるか確認しましょう

## 応用例
複数のカテゴリグループを作成した場合、それぞれ１つずつカテゴリを割り当てられるため、より細かい設定をすることが出来ます。（[元記事参照](https://qiita.com/SigRem/items/d30add04ff9a254b8aa4#%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E7%94%A8%E9%80%94)）
例えばオープンワールドゲームなどでメニュー画面を開いた時、BGMだけ抑える（メニューを閉じれば元に戻す）といった演出が簡単に実装可能です。