オーディオルーム
AudioRoom
プレイヤーを距離に関係なく、オーディオごとの「ルーム」に分けることが有用な場合があります。これは、同じオーディオルームにいるプレイヤーのみが、ドアによって隔離された部屋内でお互いに話すことができることを意味します。この目的のため、次の4つのクラスを提供しています。
AudioRoomManager
AudioRoom
AudioRoomMember
AudioDoor
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