老猫OR老妖 2023-09-12 14:33 采纳率: 0%
浏览 5

关于#unity#的问题:怎么发现当前局域网下所有创建的房间, 现在的样例中都要输入目标房间的ip,怎么实现类似CS那种可以显示局域网内所有房间并显示

unity mirror作局域网多人时,怎么发现当前局域网下所有创建的房间, 现在的样例中都要输入目标房间的ip,怎么实现类似CS那种可以显示局域网内所有房间并显示

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-12 16:05
    关注

    【以下回答由 GPT 生成】

    当前情况是手动输入目标房间的IP地址才能加入游戏,我们需要实现在局域网内自动发现并显示所有可用的游戏房间的功能。下面是一个解决方案:

    1. 使用Unity的NetworkDiscovery组件来实现局域网内的自动发现。创建一个空的游戏对象,并将NetworkDiscovery组件附加到该对象上。

    ```csharp using UnityEngine; using Mirror;

    public class NetworkDiscoveryAutoJoin : NetworkDiscovery { public override void OnServerFound(DiscoveredServer server) { // 处理发现的房间 } } ```

    1. 在上述代码中,我们需要重写OnServerFound方法,该方法会在发现可用服务器时被调用。你可以在该方法中处理你需要的逻辑,例如将可用房间信息存储到列表中,或者在游戏界面中显示可用房间。

    2. 在游戏开始时,启动NetworkDiscovery组件以开始局域网内的自动发现。

    ```csharp using UnityEngine; using Mirror;

    public class GameManager : MonoBehaviour { private NetworkDiscoveryAutoJoin networkDiscovery;

       private void Start()
       {
           networkDiscovery = GetComponent<NetworkDiscoveryAutoJoin>();
           networkDiscovery.StartDiscovery();
       }
    
       private void OnDestroy()
       {
           if (networkDiscovery != null && networkDiscovery.running)
           {
               networkDiscovery.StopDiscovery();
           }
       }
    

    } ```

    上述代码将NetworkDiscovery组件添加到GameManager游戏对象上,并在游戏开始时启动自动发现功能。在游戏结束时,记得停止自动发现以释放资源。

    1. 在游戏界面中,显示可用房间的信息。你可以使用Unity的GUI或UI系统来实现。

    ```csharp using UnityEngine; using UnityEngine.UI; using Mirror;

    public class RoomListUI : MonoBehaviour { public Text roomListText; private NetworkDiscoveryAutoJoin networkDiscovery;

       private void Start()
       {
           networkDiscovery = GetComponent<NetworkDiscoveryAutoJoin>();
       }
    
       private void Update()
       {
           roomListText.text = "";
           foreach (DiscoveredServer server in networkDiscovery.broadcastsReceived.Values)
           {
               roomListText.text += server.EndPoint.Address.ToString() + "\n";
           }
       }
    

    } ```

    上述代码将局域网内发现的服务器IP地址显示在UI的Text组件中。

    这就是实现Unity中局域网多人游戏房间自动发现的基本步骤。请注意,这只是一个简单的示例,你还可以根据自己的需求和设计来进一步完善和优化这个功能。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月12日

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?