Unity开发HoloLens2应用如何在运行时从PC端加载医疗数据文件
HoloLens 2 + Unity 2020.3 运行时读取PC端医疗数据实现方案
1 前置配置要求
先把基础环境配置做对,避免后续出现无意义的兼容性问题:
- 安装Mixed Reality Toolkit (MRTK) 2.8.x版本,这是适配Unity 2020.3和HoloLens 2的最稳定版本,不要使用更高版本的MRTK,会出现API不兼容问题
- 项目UWP打包设置里必须开启三个网络相关权限:
Internet(Client)、Internet(Client&Server)、Private Networks(Client&Server),否则HoloLens的局域网访问会直接被系统拦截 - 确保HoloLens 2和目标PC处于同一局域网下,关闭PC端公共防火墙,或者给后续用到的通信端口单独设置放行规则
2 主流实现方案(按实现门槛从低到高排序)
方案1:PC端搭建简易HTTP文件服务(最推荐,适配只读医疗数据需求)
不需要复杂网络编程,开发量最小:
- PC端用C#的
HttpListener类即可快速实现一个轻量文件服务,核心逻辑示例:
// PC端HTTP服务核心代码 var listener = new HttpListener(); // 监听8080端口的files路径请求 listener.Prefixes.Add("http://*:8080/files/"); listener.Start(); while (true) { var context = listener.GetContext(); var fileName = context.Request.Url.AbsolutePath.Replace("/files/", ""); // 替换为你PC上存储医疗数据的本地目录 var filePath = Path.Combine(@"C:\MedicalDataStorage", fileName); if (File.Exists(filePath)) { context.Response.ContentType = "application/octet-stream"; using var fileStream = File.OpenRead(filePath); fileStream.CopyTo(context.Response.OutputStream); } context.Response.Close(); }
- HoloLens端直接用Unity自带的
UnityWebRequest请求对应文件即可,调用示例:
// HoloLens端请求文件协程示例 IEnumerator LoadMedicalFile(string fileName) { // 替换为你PC的局域网IPv4地址 string requestUrl = $"http://192.168.xxx.xxx:8080/files/{fileName}"; using var request = UnityWebRequest.Get(requestUrl); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { byte[] fileRawData = request.downloadHandler.data; // 此处写入你自己的医疗数据解析逻辑即可 } }
- 优势:逻辑成熟稳定,对医疗数据格式无限制,不需要处理连接保活逻辑;如果涉及敏感数据,可自行在请求头加自定义校验字段,服务端验证通过再返回文件即可
方案2:TCP Socket双向通信(适合大文件断点续传、实时交互需求)
如果需要频繁双向传输数据或者大文件分片传输,可以用原生Socket实现:
- 直接使用C#原生
System.Net.Sockets类即可,UWP平台完全兼容该API,不需要额外引入第三方插件 - PC端作为TCP服务端监听指定端口,HoloLens作为客户端主动连接PC的局域网IP和端口,双方按照自定义的传输协议交互即可
- 注意:Socket收发逻辑要放在独立后台线程执行,不要卡Unity主线程,避免影响HoloLens的渲染流畅度
方案3:SMB共享直接读取(适合临时调试场景)
如果PC端已经开启了文件夹共享,HoloLens可以直接访问SMB共享路径读取文件:
- 需要调用UWP原生
Windows.StorageAPI,代码要用UWP平台宏包裹,仅在打包UWP时生效 - 该方案限制较多,需要提前给共享文件夹开启匿名访问权限,或者代码里传入PC的账号密码,稳定性不如前两个方案,仅适合临时调试使用
3 常见踩坑点
- Unity 2020.3的
UnityWebRequest在UWP平台默认会拦截本地局域网请求,可以自定义证书处理类跳过校验即可 - 不要使用localhost作为请求地址,一定要填PC的实际局域网IP,可在PC端cmd执行
ipconfig查看IPv4地址 - 体积超过100M的医疗数据建议做分片传输,不要一次性加载到内存,避免触发HoloLens的内存限制导致应用闪退
内容的提问来源于stack exchange,提问作者Elena Stocco
相关产品推荐
相关产品推荐

