You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M2设备使用Photon Fusion时libnanosocket兼容性问题求助

在M2芯片Mac上使用Photon Fusion开发Unity多人游戏时的libnanosocket错误解决指南

问题描述

  • Windows平台上游戏的多人匹配与大厅系统运行正常,但在M2芯片Mac设备上创建/加入匹配时触发libnanosocket相关错误。
  • Unity检视器中显示libnanosocket资源适配Intel CPU,修改设置并应用后会自动恢复为Intel架构,无法保存更改。
  • 尝试直接修改二进制文件但无操作经验,且担忧修改后设置仍会复原。
  • 重置DLL后出现新错误:EntryPointNotFoundException: nanosockets_address_set_ip。

错误堆栈信息

第一次错误

DllNotFoundException: nanosockets assembly:<unknown assembly> type:<unknown type> member:(null)
Fusion.Sockets.NetAddress.CreateFromIpPort (System.String ip, System.UInt16 port) (at Fusion/Fusion.Sockets/NetAddress.cs:145)
Fusion.Sockets.NetAddress.Any (System.UInt16 port) (at Fusion/Fusion.Sockets/NetAddress.cs:116)
NetworkRunnerHandler.CreateGame (System.String sessionName, System.String sceneName) (at Assets/_Scripts/Network/NetworkRunnerHandler.cs:176)
MainMenuUIHandler.OnStartNewSessionClicked () (at Assets/_Scripts/UI/MainMenuUIHandler.cs:64)
UnityEngine.Events.InvokableCall.Invoke () (at /Users/bokken/build/output/unity/unity/Runtime/Export/UnityEvent/UnityEvent.cs:178)
UnityEngine.Events.UnityEvent.Invoke () (at /Users/bokken/build/output/unity/unity/artifacts/generated/UnityEvent/UnityEvent_0.cs:57)
UnityEngine.UI.Button.Press () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler,
UnityEngine.EventSystems.BaseEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem ExecuteEvents.cs:57)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)
UnityEngine.EventSystems.EventSystem:Update() (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)

第二次错误

EntryPointNotFoundException: nanosockets_address_set_ip assembly:<unknown assembly> type:<unknown type> member:(null)
Fusion.Sockets.NetAddress.CreateFromIpPort (System.String ip, System.UInt16 port) (at Fusion/Fusion.Sockets/NetAddress.cs:145)
Fusion.Sockets.NetAddress.Any (System.UInt16 port) (at Fusion/Fusion.Sockets/NetAddress.cs:116)
NetworkRunnerHandler.CreateGame (System.String sessionName, System.String sceneName) (at Assets/_Scripts/Network/NetworkRunnerHandler.cs:176)
MainMenuUIHandler.OnStartNewSessionClicked () (at Assets/_Scripts/UI/MainMenuUIHandler.cs:64)
UnityEngine.Events.InvokableCall.Invoke () (at /Users/bokken/build/output/unity/unity/Runtime/Export/UnityEvent/UnityEvent.cs:178)
UnityEngine.Events.UnityEvent.Invoke () (at /Users/bokken/build/output/unity/unity/artifacts/generated/UnityEvent/UnityEvent_0.cs:57)
UnityEngine.UI.Button.Press () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:57)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)
UnityEngine.EventSystems.EventSystem:Update() (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)

解决方法

1. 升级Photon Fusion到兼容Apple Silicon的版本

旧版本Fusion可能未适配ARM64架构,前往Package Manager更新至最新稳定版,确保包含M系列芯片的支持。

2. 手动替换ARM64版本的libnanosocket库

  • 定位Fusion插件目录下的MacOS库文件:Fusion/Plugins/MacOS/libnanosocket.dylib
  • 确认是否存在ARM64架构的版本,若没有,从官方渠道获取或自行编译适配ARM64的库
  • 替换后在Unity检视器中设置该库的CPU架构为ARM64,并勾选"Override"锁定设置,防止被自动覆盖

3. 调整Unity Player构建设置

  • 打开Player Settings > MacOS > Architecture,选择Universal(同时支持Intel和ARM64)
  • 关闭"Auto Graphics API",手动添加Metal作为唯一渲染API,避免架构冲突

4. 清理缓存并重新导入Fusion

  • 删除项目根目录下的Library文件夹,清空Unity缓存
  • 重新导入Photon Fusion包,确保所有平台插件资源正确加载

5. 验证库符号导出

若出现EntryPointNotFoundException,使用终端命令检查库的符号是否存在:

nm -gU /path/to/libnanosocket.dylib | grep nanosockets_address_set_ip

如果未找到对应符号,需重新编译带有正确符号导出的ARM64版本库。

内容的提问来源于stack exchange,提问作者user26492221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:59:52