オーディオルーム
AudioRoom
プレイヤーを距離に関係なく、オーディオごとの「ルーム」に分けることが有用な場合があります。これは、同じオーディオルームにいるプレイヤーのみが、ドアによって隔離された部屋内でお互いに話すことができることを意味します。この目的のため、次の4つのクラスを提供しています。
AudioRoomManagerAudioRoomAudioRoomMemberAudioDoor
AudioRoomManager
AudioRoomManagerシーン内のルームとプレイヤーのリストを管理します。
MatchingRooms()メソッドは、プレイヤーが各移動の後に自身のいるルームのリストを取得するために呼び出されます(ルームが互いに重なり合う可能性があることに注意してください)。
AudioRoom
オーディオルームは AudioRoom コンポーネントによって定義されます。ルームの空間的な位置は中央のポイントとボックスによって設定され(シーンビューではギズモキューブとして表示されます)、各 AudioRoom には特定の Id があり、Awake() の際に AudioRoomManager に自ら登録されます。
IsIsolated ブール値は、ルーム内にいるプレイヤーがドアによって他のプレイヤーから隔離されているかどうかを定義するために使用されます。ルームに関連するドアが移動すると、Isolate() メソッドが(AudioDoor によって)呼び出され、プレイヤーがそのルームにいるかどうかを確認して、OnCurrentRoomIsolationChange() メソッドを通じてオーディオグループのフィルタリングを更新するように指示します。
AudioRoomMember
各ネットワークプレイヤープレハブには AudioRoomMember クラスがあり、これによりスタート時に AudioRoomManager に自ら登録されます。各移動時には、DidMove() コールバックを利用して、AudioRoomMember がユーザーが別のルームに移動したかどうかを確認します。そして、ルームの状態(隔離されているかどうか)に応じてオーディオグループ(DynamicAudioGroupMember)を設定します。
AudioDoor
AudioDoor クラスは、オーディオルームを隔てるドアのゲームオブジェクトに追加する必要があります。
ドアは、ToogleDoor() および Open() の公開メソッドを利用して開閉できます。
ドアの開閉を要求するプレイヤーがその権限を持っていない場合、彼はStateAuthorityにRPCを送信します。
C#
public void ToogleDoor()
{
Open(!IsOpened);
}
public void Open(bool isOpen)
{
if (Object.HasStateAuthority)
{
IsOpened = isOpen;
}
else
{
RPC_Open(isOpen);
}
}
[Rpc(sources:RpcSources.All, targets: RpcTargets.StateAuthority)]
public void RPC_Open(bool isOpen)
{
IsOpened = isOpen;
}
ドアの状態(開いているか閉じているか)は、ネットワーク化されたブール値 IsOpened で同期されます。IsOpened が変更されると、OnIsOpenedChange() メソッドが呼び出されます。
C#
[Networked(OnChanged = nameof(OnIsOpenedChange))]
public NetworkBool IsOpened { get; set; } = true;
static void OnIsOpenedChange(Changed<AudioDoor> changed)
{
changed.Behaviour.OnIsOpenedChange();
}
OnIsOpenedChange() メソッドは、ドアによって隔てられた部屋の隔離状態を変更します。その後、部屋はその部屋にいるプレイヤーに隔離状態について通知します。もし部屋が隔離されている場合、DynamicAudioGroupMember の additionalGroupFilter が roomId で設定されます。
このように、ルーム内のプレイヤーは、他のプレイヤーが定義された距離制限内にいても、その部屋のメンバーのみの音を聞くことができます。
OnStatusChange() イベントは、ドアの状態が変更されたときに生成されます。
依存関係
Dynamic Audio Group version 1.0.0
デモ
使用例の参照として、 Assets\Photon\FusionAddons\AudioRoom\Demo\Scenes\AudioRoom.unity内にデモシーンがあります。
シーンには、ドアで隔てられた2つのルームがあります。
ドアは、Door ゲームオブジェクトにある AudioDoor コンポーネントの Toggle is opened ボタンを使用して開閉できます。
複数のクライアントを接続し、各プレイヤーに関連付けられた情報パネルを観察してください。各プレイヤーは2つの球体に囲まれています。これらの球体は、プレイヤーがどのオーディオルームに所属しているか、または隔離状態を視覚的に示すために使用されることがあります。オーディオルームの状態がどのように変化するかを観察することで、プレイヤー間のコミュニケーションの様子を理解するのに役立ちます。
ドアが開いている場合:
- 緑の球体は、他のプレイヤーがその頭を入れた瞬間から聞き始めるエリアです。このとき、たとえ同じ部屋にいなくてもリスニングが開始されます。
- リスニングは、頭が赤い球体から出るとすぐに停止します。
ドアが閉じている場合:
- 同じルーム内で、かつ近くにいるプレイヤーのみが互いにチャットできるようになります。
ダウンロード
このアドオン最新バージョンは addon projectに含まれています。
サポートしているトポロジ
- shared mode
Changelog
- Version 1.0.3: Change MoveDoorWithAudioRoomStatus from NetworkBehaviour to MonoBehavior
- Version 1.0.2: Namespace modification
- Version 1.0.1: Add demo scene + add namespace
- Version 1.0.0: First release