ゲーム内のオブジェクト単位で発音数制御を行う
「同じキャラクタが発する音声」のようなキューは、通常は「カテゴリキューリミット」を用いて、同一カテゴリに登録されたキューが同時に一定数以上再生されないようにツール上で設定を行います。
ただし、例えば格闘ゲームの同キャラ対戦時などでは、発音数制限により一度にどちらかのプレーヤの音声しか再生されない、というような状況が発生してしまいます。
「ゲーム中のオブジェクト」単位での発音数制限を行いたい場合は、以下のような手順で「サウンドオブジェクト」機能がご利用いただけます。

1. キューに対してカテゴリキューリミットを指定する
AtomCraft ツールにてカテゴリを作成し、キューリミットを有効にした上で、発音数制限を行いたいキューにカテゴリを指定します。

adx2u_practice_cuelimit.png

2. AtomEx プレーヤとサウンドオブジェクトを紐づける
スクリプトから、ゲーム中のオブジェクトに対応する ::CriAtomExSoundObject を生成し、個別の CriAtomExPlayer を登録します。
これにより、ツールで設定したキューリミットがサウンドオブジェクト単位でかかるようになり、それぞれのプレーヤから同時にキューの再生が行えるようになります。
以下のサンプルコードでは、インスペクタから登録された CriAtomSource に対して個別の ::CriAtomExSoundObject を紐付け、カテゴリキューリミットをプレーヤ毎に動作させる設定を行っています。
using UnityEngine;

public class ExampleScript : MonoBehaviour {

    /* 各キャラクタのボイスを再生するためのプレーヤ */
    public CriAtomSource[] atomSources;

    /* 各キャラクタ用のサウンドオブジェクト */
    private CriAtomExSoundObject[] soundObjects;

    void Start ()
    {
        int numSources = atomSources.Length;
        soundObjects = new CriAtomExSoundObject[numSources];

        for (int i = 0; i < numSources; i++) {
            /* カテゴリキューリミットスコープを有効にしてサウンドオブジェクトを作成 */
            soundObjects[i] = new CriAtomExSoundObject(false, true);

            /* プレーヤをサウンドオブジェクトに設定 */
            soundObjects[i].AddPlayer(atomSources[i].player);
        }
    }

    void OnDestroy() {
        for (int i = 0; i < soundObjects.Length; i++) {
            soundObjects[i].DeleteAllPlayers();
            soundObjects[i].Dispose();
        }
    }
}

CRI Middleware logo Copyright (c) 2012-2018 CRI Middleware Co., Ltd. CRI ADX2 LE マニュアル (for Unity) SDKVer.2.10版