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

Unity Netcode重启主机时触发NullReferenceException错误求助

Unity Netcode重启主机时出现NullReferenceException问题

我正在开发一款联机游戏,其余功能正常,但在执行NetworkManager.Shutdown();后调用NetworkManager.StartHost();重启主机开启新游戏时,触发以下错误:

NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.Components.NetworkAnimator.OnClientConnectedCallback (System.UInt64 playerId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.0.0/Components/NetworkAnimator.cs:447)
Unity.Netcode.NetworkManager.InvokeOnClientConnectedCallback (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.0.0/Runtime/Core/NetworkManager.cs:379)
Unity.Netcode.NetworkManager.HandleConnectionApproval (System.UInt64 ownerClientId, Unity.Netcode.NetworkManager+ConnectionApprovalResponse response) (at Library/PackageCache/com.unity.netcode.gameobjects@1.0.0/Runtime/Core/NetworkManager.cs:2077)
Unity.Netcode.NetworkManager.StartHost () (at Library/PackageCache/com.unity.netcode.gameobjects@1.0.0/Runtime/Core/NetworkManager.cs:1135)
Unity.Netcode.Editor.NetworkManagerEditor.OnInspectorGUI () (at Library/PackageCache/com.unity.netcode.gameobjects@1.0.0/Editor/NetworkManagerEditor.cs:321)
UnityEditor.UIElements.InspectorElement+<>c__DisplayClass59_0.<CreateIMGUIInspectorFromEditor>b__0 () (at <d2a4066bda954b169ad464ee5a8f02ff>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)

已在空场景测试,未出现该问题,推测是自身代码与NetworkManager的交互逻辑存在问题,修改OnNetworkSpawn()函数未解决。


排查与解决建议

  • 清理残留的NetworkAnimator实例:错误指向NetworkAnimator.OnClientConnectedCallback,说明重启时可能存在未被正确销毁的NetworkAnimator对象,导致回调时引用为空。
    • 检查所有挂载NetworkAnimator的对象,确保Shutdown时通过NetworkObject.Despawn(true)或Object.Destroy()彻底销毁,而非仅禁用对象。
    • 避免给DontDestroyOnLoad标记的对象挂载NetworkAnimator,这类对象在重启时不会自动销毁,易引发残留引用问题。
  • 确保Shutdown流程完全完成:Shutdown后不要立即调用StartHost,等待网络资源完全释放后再启动主机。可以通过监听事件或帧延迟实现:
    private IEnumerator RestartHostCoroutine()
    {
        NetworkManager.Singleton.Shutdown();
        // 等待服务器和客户端状态完全关闭
        yield return new WaitUntil(() => !NetworkManager.Singleton.IsServer && !NetworkManager.Singleton.IsClient);
        NetworkManager.Singleton.StartHost();
    }
    
  • 检查ConnectionApproval逻辑:错误经过HandleConnectionApproval步骤,确认自定义连接审批代码中是否引用了重启后已销毁的对象(如玩家预制体中的组件),需在重启时重置相关引用。
  • 升级Netcode版本:当前使用的1.0.0版本存在部分重启场景的已知bug,尝试升级到稳定的新版本(如1.8.1),可能直接解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49