sound sepher's PASTIME

ゲーム開発で思ったことや、趣味などの話を書き綴っていきます。

【Unity】ADXまとめ

ADX

使用条件

  • ADX LEはPC、MacOSAndroidiPhone向け。詳細はこちら
    UnityPC限定で年収1000万オーバーの場合は10000円程のUnity用ADXを購入でOK
  • コンソールでリリースしたい場合は製品版 ADX を利用すること。
    価格はDLのみなら売上0.95%~1%をCRIWAREに支払う。
    ※買い切り条件もあるが日本では1機種12万本基準、2000円なら240万円??

仕様まとめ 

  • CriAtom コンポーネントは実行中のシーンにひとつしか配置できない。
    マルチシーンで複数配置すると、最後にロードした CriAtom に上書きされる
  • Timeline に対応させるには、ProjectSettings→Player→Scripting Define Symbols CRIWARE_TIMELINE_1_OR_NEWER を追加

使い方

  • CriAtom.AddCueSheet、AddCueSheetAsync でキューシートを追加
    CriAtom.RemoveCueSheet でキューシートを削除
  • キューシートのロード状態の確認は CueSheetsAreLoading で確認可
  • CriAtom.SetCateoryVolume でカテゴリの音量を変更
  • CriAtomExPlayer に Play、Stop、Pause、Resume など一通りの機能がある
    フェード諸々もここから実行
  • CriAtomExPlayer インスタンスUpdateAll メソッドで、弄った値を反映

インタラクティブ再生

ブロック再生

キューのブロック設定をコード側で指定するとそこから再生できる機能。詳細

  1. ADX2のブロック再生機能のチュートリアルでブロック機能を学ぶ
  2. 同人サークルreverse snareさんの記事で実際の使い方を参照
  3. コードでは再生時に CriAtomExPlayback 取得後、SetBlockIndex(index)

スイッチ

キュー「スイッチ」はプロジェクトツリー「ゲーム変数」を参照する機能。詳細

  • 複数トラックを仕込んだキューで変数値毎に再生するトラックを変える
  • ただしスイッチでは再生途中で切り替えるということはできない(らしい)
  • コード上では CriAtom.SetGameVariable(id, value)、GetGameVariable

セレクタ

セレクタを切り替えるとキュー内で再生されるトラックが切り替わる機能。詳細

  1. プロジェクトツリーのセレクタフォルダからラベルを作成
  2. キューシートで右クリック、「セレクタによるトラック遷移の作成」
  3. トラックにセレクタ登録
  4. 詳細はこちら
  5. CriAtomSource で使う場合は CriAtomExPlayer.SetSelecterLabal

便利機能

カテゴリ

複数のサウンドをまとめて制御する機能。詳細

  • カテゴリグループの下にカテゴリを最大16個まで設定可
  • キュー上ではグループ毎にカテゴリ登録可
  • 例えばマスターボリューム用グループと、内部制御用グループでわける、など

アクショントラック

アクショントラックは他のキューのパラメータを調整できたりする便利機能。詳細

  • 再生パラメータアクションでボリュームやピッチ等を変更できる
  • これはキューの他、カテゴリグループの調整にも使える

Timeline拡張

  • TimelineでCriAtomSourceコンポーネントが使える!
  • ピッチ、ボリューム、AISAC等が利用できるので、SE作りで活躍しそう
  • DAWでパラメータを調整するイメージでMAできるのでは?(まだ試してない)

REACTでダッキング

3Dポジショニング

  • AtomListener がシーンにない状態で3Dポジションのキュー再生で鳴ってしまう問題。
    これは事前に disable 状態にした AtomListener コンポーネントを配置しておくと解決。
  • 複数のリスナーを配置して、特定のリスナーを手っ取り早く有効化する方法は、
    まず全リスナーの ActivateListenerOnEnable を true にしておく。
    その後、聞かせたいリスナーを enable にしてやればよい。
    若干乱暴だが、最後に enable になったリスナーが有効化される。
  • 距離は 1m = 1unity 単位
    内部的には再生状態が続くが、距離減衰の最大をカメラ範囲距離に設定すれば、
    カメラ範囲から離れたら音が聞こえなくなる。

コールバック

  1. CriAtomExSequencer.OnCallback += Callback といった感じで書く
    Start() あたりで登録しておくと良さそう
  2. private void Callback(ref CriAtomExSequencer.CriAtomExSequenceEventInfo info)
    といった形のメソッドを作って、シーケンスイベント情報を取得
  3. CriAtomExSequenceEventInfo はIDやタグなどの情報がまとまっている
  4. あとは勝手にコールバックが発火するので好きに中身をつくるとよい
  5. ビート同期も同じような感じ。詳細はこちら

コードからクロスフェード

AtomCraft上でもある程度設定できるが、コードから設定した方が使いやすいか?

  1. クロスフェードを使用したいカテゴリは発音数を2音にしておく
  2. CriAtomExPlayer.AttachFader() でフェーダーをプレイヤーに必ずセット
    フェーダーをセットするとクロスフェードに対応(擬似的に発音数1音化)
  3. CriAtomExPlayer.SetFadeInTime(時間ms) でフェードイン時間のセット
  4. CriAtomExPlayer.SetFadeOutTime(時間ms) でフェードアウト時間のセット
  5. CriAtomExPlayer.SetFadeOutEndDelay(時間ms) で再生終了後の破棄時間のセット
  6. 上記をセットした状態で CriAtomExPlayer.Play()Stop() を実行

AttachFader() は ExPlayer を作成した後、いちど実行するだけでOK。

その後は Stop() 実行前に SetFadeOutTime() を実行すると次の Stop() 実行時に反映。

ただし、変更状態が維持されるので必要毎にセット必須。

ちなみに DetachFader() でフェーダー状態を解除可。

UniTaskでCriAtomCueSheetをawaitさせる

  • UniTask に対応させる方法はこちら(まだ UniRx 時代の解説だけど)
    一條さんのコードは古いバージョン用のコード。
    該当コンストラクタは削除された(neueccさん談)らしく、下記のように修正されたし

f:id:Ashtarte:20220204232238p:plain

気になった点

  • Unity2021.2.7f1 + ver2.37.13LEでは AtomBrowser でエラーしまくる
  • 原因は CriAtomWindowPrefs.cs の36行目で絶対パスを取得しているため。
    解決するにはプロジェクトフォルダ以下の Assets/... に直す必要あり

f:id:Ashtarte:20220205000742p:plain

動けばいいや、という良くない例

補足

参考

ashtarte.hateblo.jp