Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在不在大厅时使用LoadBalancingClient轮询可用的Unity光子室?_C#_Unity3d_Photon - Fatal编程技术网

C# 是否在不在大厅时使用LoadBalancingClient轮询可用的Unity光子室?

C# 是否在不在大厅时使用LoadBalancingClient轮询可用的Unity光子室?,c#,unity3d,photon,C#,Unity3d,Photon,使用Unity、C#和光子(PUN2),我让用户已经连接到一个房间,但现在想(在该用户不离开房间的情况下)检索当前可用的其他光子房间的列表,包括其当前在线用户数(通常只能在大厅中加入房间之前或之后进行)。光子支持告诉我需要使用LoadBalancingClient创建第二个客户端,但我不知道具体如何创建。基本Connect-PollAvailableRooms和OnlineCounts-Disconnect类和过程的代码框架是什么?谢谢 同时找到了答案。以下是我的助手类photonRoomPll

使用Unity、C#和光子(PUN2),我让用户已经连接到一个房间,但现在想(在该用户不离开房间的情况下)检索当前可用的其他光子房间的列表,包括其当前在线用户数(通常只能在大厅中加入房间之前或之后进行)。光子支持告诉我需要使用LoadBalancingClient创建第二个客户端,但我不知道具体如何创建。基本Connect-PollAvailableRooms和OnlineCounts-Disconnect类和过程的代码框架是什么?谢谢

同时找到了答案。以下是我的助手类photonRoomPller.cs的基本代码:

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