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

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

adx2u_practice_cuelimit.png

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