gpt4 book ai didi

c# - Unity 2018.2 - UNet 对接会仅适用于 LAN

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:28 24 4
gpt4 key购买 nike

我正在尝试根据 Brackeys 的教程实现 UNET 配对系统。

我已经在我的 Unity 帐户中启用了多人游戏服务并启用了该服务。

当我尝试创建一个匹配项并从我局域网中的另一台 PC 找到它时,它工作得很好。

当我尝试创建匹配项并从 LAN 外的另一台 PC 找到它时,我在匹配项列表中看不到匹配项。

我已经搜索了文档和谷歌,但没有找到任何相关信息。

有人知道吗?

顺便说一下,这是我的 JoinRoom 脚本。

回调函数返回成功,但返回的房间列表为空。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using UnityEngine.Networking.Match;
using System;

public class JoinGame : MonoBehaviour
{
List<GameObject> roomList = new List<GameObject>();

[SerializeField] GameObject roomListItemPrefab;
[SerializeField] Transform roomListParent;
[SerializeField] Text status;
private NetworkManager networkManager;

void Start()
{
networkManager = NetworkManager.singleton;

if (networkManager.matchMaker == null)
{
networkManager.StartMatchMaker();
}

RefreshRoomList();

}

public void RefreshRoomList()
{
ClearRoomList();
networkManager.matchMaker.ListMatches(0, 20, "", false, 0, 0, OnMatchList);
status.text = "Loading...";
}

public void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> responseData)
{
status.text = "";

if (!success)
{
status.text = "Couldn't get room list";
return;
}

responseData.ForEach(match =>
{
GameObject _roomListItemGO = Instantiate(roomListItemPrefab);
_roomListItemGO.transform.SetParent(roomListParent);
RoomListItem _roomListItem = _roomListItemGO.GetComponent<RoomListItem>();

if (_roomListItem != null)
{
_roomListItem.Setup(match, JoinRoom);
}

//as well as setting up a callback function that will join the game
roomList.Add(_roomListItemGO);
});

if (roomList.Count == 0)
{
status.text = "No rooms at the moment";
}
}

public void JoinRoom(MatchInfoSnapshot _match)
{
Debug.Log($"Joining {_match.name}");
networkManager.matchMaker.JoinMatch(_match.networkId, "", "", "", 0, 0, networkManager.OnMatchJoined);
ClearRoomList();
status.text = $"Joining {_match.name}...";
}

private void ClearRoomList()
{
roomList.ForEach(item =>
{
Destroy(item);
});

roomList.Clear();
}
}

最佳答案

其实我已经想通了这个问题。首先,您必须刷新配置并确保云配置处于工作状态并且启用了多人服务,有时它只是随机关闭。然后你应该通过命名直接选择配对服务器,因为我使用的是欧洲服务器 eu1-mm.unet.unity3d.com 如果你只是使用 mm.unet.unity3d.com 它可以在不同的服务器上托管你的游戏你的客户。而且不同服务器的玩家不会互相看到对方。或者,您可以启动自己的本地服务器并端口转发您的 IP,然后将其用作客户端的主机 IP。除非你有动态 IP,否则你可以使用像 no-ip 这样的服务来为你的 IP 获取静态域。我现在正在使用这种方法,而且它是免费的。

关于c# - Unity 2018.2 - UNet 对接会仅适用于 LAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52005171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com