文章目录
- 前言
- 1. 核心痛点:为什么 Android 搜不到 PC 服务器?
- 2. 解决方案:SimpleDiscovery 核心逻辑
- 3. 如何接入 Unity Netcode for GameObjects (NGO)?
- 4. 防火墙与网络设置
- 5.android 权限开启
- 5.SimpleDiscovery代码示例
前言
在开发 Unity 多人游戏(如 Pico/Quest VR 协作)时,局域网发现(LAN Discovery) 是提升用户体验的关键。然而,官方的 Unity.Netcode.Transports.Discovery 在 Android 平台上经常遇到“搜不到、连不上”的顽疾。
在经历了对 Mirror、LiteNetLib 的深度剖析及多次“防火墙玄学”调试后,我总结了一套不依赖任何重型框架、针对 Android/VR 深度优化的轻量级 UDP 服务发现方案:SimpleDiscovery。
1. 核心痛点:为什么 Android 搜不到 PC 服务器?
在开发过程中,我发现导致失败的通常不是逻辑代码,而是以下三个硬件与系统级的“坑”:
MulticastLock 限制:Android 系统为了省电,默认会拦截未知的 UDP 广播包。不申请“组播锁”,App 就处于“耳聋”状态。
防火墙策略:Windows 防火墙有时会处于一种“非对称拦截”状态,关闭防火墙反而可能导致底层路由策略失效,开启并正确配置入站规则才是王道。
多网卡干扰:PC 上若安装了虚拟机(VMWare/VirtualBox),广播包极易发往虚拟网卡,导致真实的 Wi-Fi 客户端收不到数据。
2. 解决方案:SimpleDiscovery 核心逻辑
为了解决上述问题,本方案在 SimpleDiscovery 类中集成了以下工业级特性:
A. 跨平