Cluster Creator Kit v2.33.0(以下、CCK)から、「ボイス音量フィルタAPI」を使うことができるようになりました。
ワールド内での音の距離減衰を上書きすることはできませんが、距離減衰の中であればこのAPIを使うことでワールドにいるプレイヤーの個々のボイスの大きさをギミックで調整できるようになります。
そこで、今回はボイス音量フィルタの作例として、同じテーブルの周りに座ったプレイヤー同士のみが会話できるギミックを作成し、そのサンプルを配布します。
テーブルは増やすこともできるので、すぐ近くに配置したテーブルでもお互いの声は聞こえないようにできます。

すぐに使えるサンプルのダウンロードはこちらから
この記事では、すぐに使えるサンプルを配布しています。
まずは使ってみたいという方は下記からダウンロードしてください。本記事ではサンプルの使い方と、その中身のギミックについて解説していきます。
サンプルの使い方
サンプルのunitypackageをダウンロードして自分のプロジェクトにインポートすると、VoiceVolumeFilterSampleというフォルダがAssetsの下に作成されます。
この中のPrefabsフォルダにあるMixerをヒエラルキーのどこでも良いので1つだけ配置し、同じくPrefabsフォルダのTableAndChairsをお好きな場所に配置すれば完了です。

テーブルを複数置きたい場合は、TableAndCharisを複数配置し、ヒエラルキー上でTableAndChairs->Chairs->Chair->Cylinderを選択、インスペクタからOnCreateItemTriggerのValueを1以外に書き換えます。この数字が同じ椅子に座った人同士が会話ができるため、同じテーブルの椅子は同じ数字にしておく必要があります。
また、0は「椅子に座っていない人」同士が会話するための特別な数字として使用しているため、指定する場合は0以外を入力してください。

自分で用意したモデルに今回のサンプルスクリプトを使用したい場合は、以下のように設定してください。
- mixer.js
- モデルを使用していないので、サンプルのprefab(Mixer)をそのまま設置すればOKです
- volume.js
- モデルを使用していないので、サンプルのprefab(Mixer)をそのまま設置すればOKです
- ride.js
- RidableItemコンポーネントが付いているオブジェクトに以下のコンポーネントを追加します
- OnCreateItemTrigger
- トリガーをひとつ追加し、Targetを”This”と”group”に、Valueを”Integer”と”1”にします
- “1”の部分は会話を行いたいグループごとに同じ数字にします(ただし0以外)
- ScriptableItem
- SourceCodeAssetに”ride.js”を指定します
- OnCreateItemTrigger
- RidableItemコンポーネントが付いているオブジェクトに以下のコンポーネントを追加します
サンプルスクリプトの改変例
サンプルスクリプトは、
- mixer.js
- volume.js
- ride.js
の3つのスクリプトファイルで構成されています。
サンプルでは椅子に座っていない人、各テーブルのイスに座っている人のそれぞれの声は全く聞こえないようになっていますが、volume.jsの以下の部分を書き換えることで、他の会話もうっすら聞こえるといった状態にすることも可能です。
// 会話グループが同じプレイヤーは音声が聞こえるように、それ以外はミュートにする
Object.values(players).forEach(value => {
_.setVoiceVolumeRateOf(value.player, value.group === group ? 1 : 0); // <- ここが0のままだと完全ミュートに、0.2などにすると他の会話も聞こえるようになる
});ボイス音量フィルタAPIとは
ボイス音量フィルタAPIは、指定したプレイヤーが聞こえるボイスの音量を個別に調整できる機能です。
例えば「AさんがBさんとCさんの声を聞いている」といった状況があった時、Aさんから見てBさんとCさんが同じような距離にいても、Bさんの声は大きく、Cさんの声はほとんど聞こえないといったように設定することができます。
ワールドでのボイスの距離減衰の中で音量を調整するものとなるため、距離減衰によって聞こえないほど遠くに離れたプレイヤーの声を聞こえるようにするといったことはできません。
また、イベントにおいてはゴーストのプレイヤーがギミックを使用することができないため、全ての音は従来通り聞こえる状態となります。
使用する関数は以下のひとつです。
使い方としては、聞こえる音量を設定したいプレイヤーにPlayerScriptをセットし、その中で実行します。
playerIdには対象のプレイヤーから見て音量を調整したい相手を、rateには0.0~1.0の範囲で音量を指定します。
1.0を指定した場合には、ボイス音量フィルタAPIを使用していない状態と同じになります。
例えばチームに分かれて対戦するようなゲームで、事前にチームごとに作戦会議をしたり…といった時に今回のサンプルは便利に使えそうです。それ以外にもボイス音量フィルタAPIは色んな使い道が考えられるので、ぜひ試してみてください!





















