C# 是否在不在大厅时使用LoadBalancingClient轮询可用的Unity光子室?
使用Unity、C#和光子(PUN2),我让用户已经连接到一个房间,但现在想(在该用户不离开房间的情况下)检索当前可用的其他光子房间的列表,包括其当前在线用户数(通常只能在大厅中加入房间之前或之后进行)。光子支持告诉我需要使用LoadBalancingClient创建第二个客户端,但我不知道具体如何创建。基本Connect-PollAvailableRooms和OnlineCounts-Disconnect类和过程的代码框架是什么?谢谢 同时找到了答案。以下是我的助手类photonRoomPller.cs的基本代码:C# 是否在不在大厅时使用LoadBalancingClient轮询可用的Unity光子室?,c#,unity3d,photon,C#,Unity3d,Photon,使用Unity、C#和光子(PUN2),我让用户已经连接到一个房间,但现在想(在该用户不离开房间的情况下)检索当前可用的其他光子房间的列表,包括其当前在线用户数(通常只能在大厅中加入房间之前或之后进行)。光子支持告诉我需要使用LoadBalancingClient创建第二个客户端,但我不知道具体如何创建。基本Connect-PollAvailableRooms和OnlineCounts-Disconnect类和过程的代码框架是什么?谢谢 同时找到了答案。以下是我的助手类photonRoomPll
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
using ExitGames.Client.Photon;
public class PhotonRoomPoller : MonoBehaviourPunCallbacks
{
// Creates a second Photon peer to poll online room counts info.
// A second peer is necessary as one otherwise while in a Room can't join
// the Lobby, needed to get the room list. API at
// doc-api.photonengine.com/en/pun/v2/class_photon_1_1_realtime_1_1_load_balancing_client.html
Action<List<RoomInfo>> callback = null;
LoadBalancingClient client = null;
public void GetRoomsInfo(Action<List<RoomInfo>> callback)
{
this.callback = callback;
client = new LoadBalancingClient();
client.AddCallbackTarget(this);
client.StateChanged += OnStateChanged;
client.AppId = PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime;
client.AppVersion = PhotonNetwork.NetworkingClient.AppVersion;
client.ConnectToRegionMaster("us");
}
void Update()
{
if (client != null)
{
client.Service();
}
}
void OnStateChanged(ClientState previousState, ClientState state)
{
// Debug.Log(state);
if (state == ClientState.ConnectedToMaster)
{
client.OpJoinLobby(null);
}
}
public override void OnRoomListUpdate(List<RoomInfo> infos)
{
if (callback != null)
{
callback(infos);
}
client.Disconnect();
}
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用光子双关语;
使用光子。实时;
使用ExitGames.Client.Photon;
公共类PhotonRoompller:单调用
{
//创建第二个光子对等点以轮询联机房间计数信息。
//第二个同伴是必要的,否则在房间中无法加入
//大厅,需要获取房间列表。API位于
//doc-api.photonengine.com/en/pun/v2/class\u photon\u 1\u 1\u realtime\u 1\u load\u balancement\u client.html
动作回调=null;
LoadBalancingClient=null;
public void GetRoomsInfo(操作回调)
{
this.callback=回调;
客户端=新的LoadBalancingClient();
client.AddCallbackTarget(此);
client.StateChanged+=OnStateChanged;
client.AppId=PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime;
client.AppVersion=PhotonNetwork.NetworkingClient.AppVersion;
客户。ConnectorRegionMaster(“美国”);
}
无效更新()
{
如果(客户端!=null)
{
client.Service();
}
}
void OnStateChanged(ClientState previousState、ClientState状态)
{
//Debug.Log(状态);
if(state==ClientState.ConnectedToMaster)
{
client.opjoinlobble(null);
}
}
公共覆盖无效OnRoomListUpdate(列表信息)
{
if(回调!=null)
{
回调(infos);
}
client.Disconnect();
}
}
用法,例如:
PhotonRoomPoller roomPoller = gameObject.AddComponent<PhotonRoomPoller>();
roomPoller.GetRoomsInfo
(
(roomInfos) =>
{
AddContent(roomInfos);
Destroy(roomPoller);
}
);
PhotonRoomPloler roomPoller=gameObject.AddComponent();
roomPoller.GetRoomsInfo
(
(roomInfos)=>
{
添加内容(roomInfos);
销毁(roomPoller);
}
);
需要特别注意(尽管很多内容也可以保持为空或未定义,例如gameVersion)。这一行是关键
client.AppVersion=PhotonNetwork.NetworkingClient.AppVersion
。我基本上有相同的实现,但是使用了这一行,而不是client.AppVersion=PhotonNetwork.PhotonServerSettings.AppSettings.AppVersion
,它不起作用。这是因为光子将库版本字符串附加到应用程序版本,但它在内部执行此操作,而不记录此行为。最好是明确地这样做,以明确发生了什么:client.AppVersion=PhotonNetwork.PhotonServerSettings.AppSettings.AppVersion+“\u”+PhotonNetwork.PunVersion
。