ポジショナルチャンネルの設定

ゲームがポジショナルチャンネルに参加している場合、そのチャンネルに関連付けられた 3D 空間内でのユーザーの位置と向きで Vivox SDK を頻繁に更新する必要があります。クライアントは、シーン内のプレイヤーを表すゲームオブジェクトと、オーディオが接続されているアクティブなポジショナルチャンネルの channelName を指定して VivoxService.Instance.Set3DPosition(GameObject participantObject, string channelName) メソッドを呼び出すことでこれを行います。さらに、TextState が接続されている可能性がありますが、位置を設定するにはオーディオに接続する必要があります。

ポジショナルチャンネルにおける参加者の位置は、その参加者が誰の音声を聞くことができるか、および、聞こえる他のプレイヤーの音声のラウドネスと方向に影響します。テキストが有効になっている場合は、位置により、テキストメッセージの送信対象が送信者に音声が聞こえる範囲内のユーザーのみに制限されます。

ポジショナルチャンネルでは、右手系の座標系を使用します。プレイヤーのアバターが顔を正面に向けて立っている場合は、以下の基準が適用されます。

  • 正の X 軸がアバターの右に適用されます。
  • 正の Y 軸はアバターの足から上に向かって頭まで伸びます。
  • 正の Z 軸はアバターの胸から背中に伸びます。

プレイヤーがポジショナルチャンネルに参加すると、プレイヤーのアバターは、特定の位置に移動するまでは null 位置に配置されます。

プレイヤーがポジショナルチャンネルに参加すると、プレイヤーのアバターは、特定の位置に移動するまでは null 位置に配置されます。

ノート: Unity では、左手系の、Y 軸が上方向を示すワールド座標系 (X 軸の正が右方向、Y 軸の正が上方向、Z 軸の正が画面方向) を使用します。座標系間の変換は Vivox SDK によって内部で処理されるため、この変換を手動で実行しないでください。

設定された 3D プロパティによりポジショナルチャンネルを設定して参加した後は、Vivox SDK にアクターの位置と向きを報告します。

以下のコードは、ポジショナルチャンネルでユーザーの位置を設定する方法の例です。

using UnityEngine;
using Unity.Services.Vivox;

class PositionalChannelExample : MonoBehaviour
{
    . . .
    // For this example, _nextPosUpdate has been initialized as Time.time at
    // game start. _localPlayerGameObject is the GameObject controlled by the local player.

    void Update()
    {
        . . .
        if (Time.time > _nextPosUpdate)
        {
            VivoxService.Instance.Set3DPosition(_localPlayerGameObject, activePositionalChannelName);
            _nextPosUpdate += 0.3f; // Only update after 0.3 or more seconds
        }
        . . .
    }
    . . .
}

このサンプルコードは、送信される 3D ポジショナル更新の回数を制限するためのメソッドを示しています。例えば、Update メソッドの時間管理テクニックでは、更新の試行を合理的な 1 秒あたりの回数に制限できます。サンプルメソッド Update3DPosition では、カスタムの CachedPosition クラスによってプレイヤーの位置と向きがキャッシュされ、値が変更されている場合にのみ Set3DPosition の呼び出しが許可されます。