はじめに
まず、残念ながら
ADX2LEではUnity WebGL用のデータが作れません。
将来的なTipsとして載せておきます。
ADX2 Unity for WebGLでは使えますが、
使用する場合はライセンスなどの確認が必要です。
ここでは、将来のため人柱的に
Unity1weekで試みた備忘録になります。
環境は
Mac
Unity 2018.3.8f1 (2019-03-16時点での最新)
CRI Atom Craft Ver.3.35.00 (2019-03-16時点での一つ前のバージョン)
Unity for WebGL(2019-03-16時点での最新)
CRIWARE Unity Emscripten Ver.2.30.42
を使用。
データの作成
WebGLターゲットを追加し、
Unity Assetsを出力するようにしてビルド。
Unityで新規プロジェクト作成
チュートリアル
をみつつ
Unity PluginではAtom WindowからAssetsを選択して
Updateしてデータ更新。
UnityのSwitch TargetでWebGLに切り替えて
AtomPlayerのPlayOnStartをチェックし
Editor上で実行、音が鳴ることを確認。
ビルドしてブラウザで音が鳴ることも確認。
unityroom対応
さて、unityroomへあげてみて音が鳴るだろうか?
音が鳴らない!
ブラウザで実行中に
cmd+opt+iキーで開発者モードに
エラーが出ているのがわかる。
ACFのロードに失敗している。
unityroomの仕様で、streamingAssetsのファイルを上げることができない
これが原因で音が鳴らない。
これをなんとか解決しないといけない。
ADX2のチュートリアルなどでは、
streamingAseetsにデータが置かれているけれど、
実のところこれ、好きなところからロードできるようです。
参考→ ADX2Web版でありそうな対処
どうやらtextリソースとしてbytes配列で渡す方法があった。
Resourcesにファイルを移動し、拡張子をbytesに変更。
HierarchyにあるCRIWAREとbgm(CriAtomSource)を無効化。(こちらでロード再生できないので)
空のGameObjectを追加して、
ADX2Loaderなるスクリプトを追加。ここでリソースからもロードと再生をしてみた。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ADX2Loader : MonoBehaviour
{
CriAtomSource atomSourceSe;
byte[] raw_dataAcf;
byte[] raw_dataAcb;
IEnumerator Start()
{
// ----
// テキストアセットとしてACFを読み込む。tunagary20190316-2.bytesはResourcesフォルダに配置する。
// ----
TextAsset text_assetAcf = Resources.Load<TextAsset>("tunagaru20190316-2");
raw_dataAcf = text_assetAcf.bytes;
// ----
// テキストアセットとしてACBを読み込む。CueSheet_0.bytesはResourcesフォルダに配置する。
// ----
TextAsset text_assetAcb = Resources.Load<TextAsset>("CueSheet_0");
raw_dataAcb = text_assetAcb.bytes;
// ----
// ACF登録
// ----
CriAtomEx.RegisterAcf(raw_dataAcf);
// ----
// CriAtomを作成しゲームオブジェクトに追加
// ----
this.gameObject.AddComponent<CriAtom>();
// ----
// キューシートを追加
// ----
var cuesheet = CriAtom.AddCueSheet("CueSheet_0", raw_dataAcb, null);
// ----
// キューシートのロード完了まで待つ WebGL版はロードに時間がかかる(ロード前にAtomにアクセスしないようにここで待つ)
// ----
while (cuesheet.IsLoading)
{
yield return new WaitForEndOfFrame();
}
// ----
// DSPバス設定
// ----
CriAtom.AttachDspBusSetting("DspBusSetting_0");
atomSourceSe = gameObject.AddComponent<CriAtomSource>();
atomSourceSe.cueSheet = "CueSheet_0"; //キューシート名指定
atomSourceSe.Play(0); // キューID指定再生
}
}
Editorで音が鳴るのを確認!
unityroomでも音が鳴るのを確認!
データにビート同期情報埋め込んだり
アクションで音止めたり
アクション経由で音を鳴らすことでビート同期させたり
ビート同期でオブジェクトの大きさ変えたりはこちら
CRIADX2のビート同期を使ってリズムに合わせた演出をつける
を参考に
再生後にコールバックを設定しないとうまくいかないところが注意点。
Editor上だと問題なくても、ブラウザで動かすと再生タイミングによってうまくコールバックが機能しない時があった。
確実に再生されているタイミングでコールバックを登録する。
まとめ
Webならではの対処がいろいろあるけど、
一度鳴ってしまえばあとはPC版と同じはずなのでいろいろできそう。
実際のところ、Web上でのファイル操作などはURL指定だったりするのかもしれない。(Web関連詳しく無いけど、ストレージサービスみたいなのとかでも、上の例みたいなバイナリでロードもできるのでいろいろとできるはず)
なにかの参考になれば幸い。