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
相关产品推荐
相关产品推荐

