如何统一使用光子网络连接到我们自己的专用服务器?(自托管)
Posted
技术标签:
【中文标题】如何统一使用光子网络连接到我们自己的专用服务器?(自托管)【英文标题】:How to connect to our own dedicated server using photon networking in unity?(Self-hosted) 【发布时间】:2021-10-27 08:50:31 【问题描述】:在下面的脚本中,我试图将我的游戏与我自己的服务器连接起来。但是每次我得到一个像
这样的错误-(JoinRandomRoom 失败。客户端在 MasterServer 上(必须是 Master Server 才能进行匹配)但尚未准备好操作(状态:ConnectingToMasterServer)。等待回调:OnJoinedLobby 或 OnConnectedToMaster。)
请检查我下面的脚本并检查有什么问题。
[SerializeField] private GameObject FindOppenentTxt = null;
[SerializeField] private GameObject waitingStatusPanel = null;
[SerializeField] private Text waitingStatusText = null;
private bool isConnnecting = false;
[SerializeField]
private const string GameVersion = "1.1";
private const int maxPlayer = 2;
private string masterServerAddress = "**********";
private int port = 7777;
private string appID = "*************7d645e794534";
private void Awake()
PhotonNetwork.AutomaticallySyncScene = true;
private void strart()
PhotonNetwork.SendRate = 20;
PhotonNetwork.SerializationRate = 5;
PhotonNetwork.ConnectToMaster(masterServerAddress, port, appID);
//PhotonNetwork.ConnectUsingSettings();
public void FindOpponent()
isConnnecting = true;
FindOppenentTxt.SetActive(false);
waitingStatusPanel.SetActive(true);
waitingStatusText.text = "Searching...";
if(PhotonNetwork.IsConnected)
PhotonNetwork.JoinRandomRoom();
Debug.Log("findingRoom");
else
//PhotonNetwork.CreateRoom(null, new RoomOptions MaxPlayers = maxPlayer );
Debug.Log("creatingRoom");
PhotonNetwork.GameVersion = GameVersion;
//PhotonNetwork.ConnectUsingSettings();
PhotonNetwork.ConnectToMaster(masterServerAddress, port, appID);
Debug.Log(PhotonNetwork.CurrentRoom);
public override void OnConnectedToMaster()
if(isConnnecting)
PhotonNetwork.JoinRandomRoom();
Debug.Log("Server IP: " + PhotonNetwork.ServerAddress);
public override void OnDisconnected(DisconnectCause cause)
waitingStatusPanel.SetActive(false);
FindOppenentTxt.SetActive(true);
Debug.Log("disconnected");
public override void OnJoinRandomFailed(short returnCode, string message)
Debug.Log("There are no clients");
PhotonNetwork.CreateRoom(null, new RoomOptions MaxPlayers = maxPlayer );
public override void OnJoinedRoom()
Debug.Log("Joined a room ssuccessfully");
int playerCount = PhotonNetwork.CurrentRoom.PlayerCount;
if(playerCount != maxPlayer)
waitingStatusText.text = "waiting for an opponent";
else
waitingStatusText.text = "Opponent Found...please wait..";
public override void OnPlayerEnteredRoom(Player newPlayer)
if (PhotonNetwork.CurrentRoom.PlayerCount == maxPlayer)
PhotonNetwork.CurrentRoom.IsOpen = false;
waitingStatusText.text = "opponent in room";
PhotonNetwork.LoadLevel("MainScene");
【问题讨论】:
您是否验证了您的自托管 Photon 服务器实际上正在运行?测试客户端可以连接到它吗?与服务器在同一台机器上运行的 Unity 客户端可以连接到它吗?您是否配置了服务器计算机的防火墙和路由器,以允许指定端口和协议上的传入连接通过?您是否已将服务器配置为实际侦听指定非默认端口上的传入连接? 您使用的是 Photon Server v4 还是 v5?对于 v5,要连接的服务器类型应该是名称服务器,而不是主服务器。但是,主服务器是 v4 的正确服务器类型。您是否按照doc.photonengine.com/en-us/server/current/getting-started/… 的指南进行操作? 【参考方案1】:首先strart
应该是Start
.... 否则它永远不会被调用。
然后 afaik 为了能够加入/创建房间,您首先必须在 大厅!
所以你应该使用PhotonNetwork.JoinLobby()
(或PhotonNetwork.JoinLobby(TypedLobby)
),然后听MonoBehaviourPunCallbacks.OnJoinedLobby
,例如
public override void OnConnectedToMaster()
Debug.Log("Server IP: " + PhotonNetwork.ServerAddress);
if(isConnnecting)
Debug.Log("joining default lobby ...");
PhotonNetwork.JoinLobby();
public override void OnJoinedLobby()
Debug.Log("Joined Lobby!");
Debug.Log("Trying to join random room ...")
PhotonNetwork.JoinRandomRoom();
另见Matchmaking and Lobby
【讨论】:
我遵循了您的陈述,并且遵循了所有文档,但仍然无法找到我的解决方案。你有任何教程或步骤或任何东西,以便我可以轻松理解并可以将我的游戏连接到我自己的服务器。 我唯一的目标是使用 IP 地址和端口连接到我自己的服务器。此外,当我尝试使用光子服务器连接时,它工作正常。当我把这些IP地址和端口。它不工作。 这个答案不正确。客户不必须在大厅内才能加入房间。加入随机房间可以正常工作,而无需在大厅内。只有在大厅内才能获取自动更新本地可用房间列表的房间列表事件。但是,也可以手动调用 GetRoomList 操作来接收大厅外的房间列表更新。 @Kaiserludi 嗨,谢谢你的回复,你能告诉我上面提到的网络脚本需要哪些修改吗?如果您有任何脚本或步骤,请与我分享。提前致谢。 @SurajSharma:请阅读我在您的问题下的评论以进行检查。如果在连接到 Photon Cloud 时工作正常,我认为问题的根源不在脚本内部。所以这很可能是服务器配置的问题。以上是关于如何统一使用光子网络连接到我们自己的专用服务器?(自托管)的主要内容,如果未能解决你的问题,请参考以下文章
Android 10 / API 29:如何将手机连接到配置的网络?
阿里云 经典网络使用ClassicLink连接到专用网络后,192.168网段需要添加路由