【Unity：CRI】UnityでCRIを使う覚悟はいいか？オレはできてる

[グレンジ Advent Calendar 2018](https://qiita.com/advent-calendar/2018/grenge) 4日目の記事担当kenjiです
クライアントエンジニアやってます

UnityでCRI使ってみたいけど導入面倒なんでしょ？
って人がさくっとCRIを使用して音を鳴らすまでを書きます

「なぜCRIを使うのか…」
「こういう時の設定はどうするのか…」
そんなことはいいからとりあえずCRI試したい
という覚悟がある人向けです

今回は無料版のADX2 LEを使用しますが、有償版も基本は同じです

内容は大きく分けて
・CriAtomCraftでデータ作成
・CRI ADX2 LEで音を鳴らす

※実装内容は「Unity 2018.2.x」時点の話です
※CRIは「cri_adx2le_sdk_v20601」を使用してます

# ダウンロード
CRI ADX2 LEのダウンロードはこちらから
https://www.adx2le.com/download/index.html

# CriAtomCraftでデータ作成
## 1. 起動
cri_adx2le_sdk_v○○/cri/tools/criatomex/CriAtomCraft.exe
ここにある実行ファイルを開く

## 2. 新規作成
![cir_atom_craft_new.png](https://qiita-image-store.s3.amazonaws.com/0/216261/37b63fd5-ab59-fde8-8e42-52672d8bc52e.png) ![cir_atom_craft_new_name.png](https://qiita-image-store.s3.amazonaws.com/0/216261/1f1e6cc7-2019-b63a-7fd9-f8425794e6c4.png)
プロジェクト名は後で書き出すファイル名になるので適当に付けると後悔する

## 3. データ追加
![cir_atom_craft_work_unit.png](https://qiita-image-store.s3.amazonaws.com/0/216261/6d7e4013-cb91-1a4b-73b1-edb75e8276d5.png)　![cir_atom_craft_work_unit_new.png](https://qiita-image-store.s3.amazonaws.com/0/216261/a6a42131-2873-34e3-5202-8e4bfe45d5b6.png)
音声ファイルをドラッグしてデータ追加します
CRIはキューシートというファイルごとにデータを読み込むことになるので
BGMなど大きめなデータは1キューシート1データ
SEのような小さいデータは1キューシートに複数まとめます

## 4. ビルド
![cir_atom_craft_build.png](https://qiita-image-store.s3.amazonaws.com/0/216261/7653e759-5a47-7955-deb9-9c6c1e890e59.png)
![cir_atom_craft_build_setting.png](https://qiita-image-store.s3.amazonaws.com/0/216261/510a0a79-38e6-6d34-5164-9df726d152e5.png)
ビルドするキューシートにチェック入れてビルド！
「Unity情報出力」にチェック入れるとUnity用のフォルダ階層で書き出してくれます
「C#ヘッダー出力」にチェック入れると定数や列挙体が記述されたcsファイルを書き出してくれます

## 5. データの場所
ここに書き出されます
(プロジェクト名)/Public/...
(プロジェクト名)/Public/(キューシートフォルダ名)/...

「Unity情報出力」にチェック入れると下記にも書き出されます
(プロジェクト名)/Public/Assets/StreamingAssets/...

最低限必要なのは
プロジェクト設定の.acfファイル
各キューシートの.acbファイル

# CRI ADX2LEで音を鳴らす
## 1. Unityパッケージインポート
cri_adx2le_sdk_v○○/cri/unity/plugin/criware_unity_plugin.unitypackage
Unityプロジェクトにこれをインポート

## 2. CRIファイル取り込み
先ほど書き出した.acfと.acbファイルを
Assets/StreamingAssets配下に

「Unity情報出力」にチェック入れてた場合は
(プロジェクト名)/Public/Assets/StreamingAssets/...
をごっそり持ってくればOK

## 3. CRIプレハブ生成
![cir_adx2_init.png](https://qiita-image-store.s3.amazonaws.com/0/216261/6924f1e1-72d0-4412-4ab6-a7b16b39a405.png)
Unity上部のメニュー「GameObject」に「CRIWARE」が追加されてるのでInitializerとErrorHandlerを作成
これでUnity起動するとCRIの初期化まで行われます

## 4. acfファイル読み込み
適当に新規GameObject作成して下記csファイルを貼り付けます

```c#:CriSample.cs
using UnityEngine;

public class CriSample : MonoBehaviour
{
	private void Start()
	{
		// acf設定
		string path = CriWare.streamingAssetsPath + "/sample.acf";
		CriAtomEx.RegisterAcf(null, path);
	}
}
```

これでプロジェクト設定のファイルが読み込めました

## 5. acbファイル読み込み
```c#:CriSample.cs
using UnityEngine;

public class CriSample : MonoBehaviour
{
	private void Start()
	{
		// acf設定
		...

		// CriAtom作成
		new GameObject().AddComponent<CriAtom>();

		// BGM acb追加
		CriAtom.AddCueSheet("sample_bgm", "sample_bgm.acb", null, null);
		// SE acb追加
		CriAtom.AddCueSheet("sample_se", "sample_se.acb", null, null);
	}
}
```
acbファイルを管理するためのCriAtomを生成します
あとは使用したいacbファイルの追加処理を書くだけ

## 6. 音を鳴らす
```c#:CriSample.cs
using UnityEngine;

public class CriSample : MonoBehaviour
{
	private void Start()
	{
		// SE acb追加
		...

		// BGMを鳴らす
		CriAtomSource bgm = new GameObject().AddComponent<CriAtomSource>();
		bgm.loop = true;
		bgm.cueSheet = "sample_bgm";
		bgm.Play(0);

		// SEを鳴らす
		CriAtomSource se = new GameObject().AddComponent<CriAtomSource>();
		se.loop = false;
		se.cueSheet = "sample_se";
		se.Play(0);
	}
}
```
BGMとSEを鳴らすオブジェクトを作成
BGMはループあり、SEはループなしに設定
Playの引数にはCriAtomCraftで設定してあるキューIDを渡します
これで鳴ります！

![cir_atom_craft_work_unit.png](https://qiita-image-store.s3.amazonaws.com/0/216261/63112831-41e6-19f3-9d2c-db20361ed3f4.png) ![cir_atom_craft_cueid.png](https://qiita-image-store.s3.amazonaws.com/0/216261/6a96c883-ef05-bc0a-017e-8fb14af8765f.png)
キューIDは特に設定しなかった場合は各キューシートごとに追加した順に0から割り当てられます
またCriAtomCraftで「C#ヘッダー出力」にチェック入れた場合に書き出されたcsファイルにも記述されてます

# まとめ
最速でCRIで音を鳴らしました（たぶん）

逆にできることが沢山あるので色々設定しようとすると地味に時間かかります
情報は結構まとまってるので下記を参考にするとやりたいことや不明点がわかるかと思います
https://www53.atwiki.jp/soundtasukeai/pages/22.html

これを機会にCRIを使用してみましょう！

「いいね押そう」…そんな言葉は使う必要がねーんだ
「いいね押した」なら使ってもいいッ！