Unity Networking-UNet中的加法场景加载
简短说明:我正在我的主场景中加载一个添加场景 ,它的加载很好但是添加场景的GameObject(包含网络标识组件)正在变得禁用 。
详细信息:我正在通过此代码加载一个附加场景,以便添加一个场景加载到我的服务器和所有工作正常的客户端:
[ClientRpc] public void RpcLoadLevelAcrossNetwork() { SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); }
虽然它已将我的场景加载到客户端/服务器但是具有网络标识的对象被禁用(这是默认行为,因为我检查了Unity UNetSceneObjects ,其中声明:
加载场景时,将禁用场景中具有NetworkIdentity组件的所有对象; 在客户端和服务器上。 然后, 当场景完全加载时,将调用NetworkServer.SpawnObjects()来激活这些联网的场景对象。 这将在服务器场景完成加载时由NetworkManager自动完成 – 或者可以由用户代码直接调用。
作为文档声明它将自动激活网络标识对象,但它不会在我的上下文中发生。 我的场景加载很好,但其网络标识对象不活动。
我做错了什么?
我还试图通过在我新加载的场景中调用NetworkServer.SpawnObjects()来激活我自己的对象,但它只在服务器端生成对象,同时在客户端显示错误
未找到1个Spawn场景对象的Spawn场景对象找不到2个未找到的Spawn场景对象….. ….. 。 。
任何Unet冠军可以帮助我吗?
编辑/更新方法:
我已经根据添加场景加载的统一论坛讨论更改了我的代码,它在服务器上加载我的附加场景有错误(如下所示),仍然我的客户端的场景网络标识对象被禁用:
错误:
使用无效连接对象调用Ready():conn = null
另一个代码尝试:
#region AdditiveSceneLoadingSetup [Command]//calling this for additive scene load- its start public void CmdLoadAdditiveSceneMainCall() { RpcLoadAdditiveScene(); StartCoroutine(LoadAdditiveSceneAtServer()); } [ClientRpc] public void RpcLoadAdditiveScene() { Debug.Log("RpcLoadAdditiveScene"); StartCoroutine(LoadAdditiveSceneAtClient()); } public IEnumerator LoadAdditiveSceneAtClient() { Debug.Log("LoadAdditiveSceneAtClient"); yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); List networkConnectionList = FindObjectOfType().networkConnectionList; for (int i = 0; i < networkConnectionList.Count; i++) { ClientScene.Ready(networkConnectionList[i]); } //ClientScene.Ready(this.connectionToServer);//connectionToServer } public IEnumerator LoadAdditiveSceneAtServer() { Debug.Log("LoadAdditiveSceneAtServer"); NetworkServer.SetAllClientsNotReady(); yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); NetworkServer.SpawnObjects(); } #endregion AdditiveSceneLoadingSetup
你有没有解决这个问题?
我的猜测是你需要在调用SpawnObjects之前等待所有客户端’Ready’(场景加载完成)。
迟到了这里的聚会,但我也碰到了这个,并在这里想出了我自己的解决方案:
https://gist.github.com/kristianpd/485fd7d78512a22a80117a2d22664185
问题的核心是在NetworkIdentity
上重复使用SceneId,当你加载另一个场景时,它将与当前的NetworkIdentity.sceneId
冲突。
有关该解决方案的更多上下文,此论坛post是我在进入此解决方案之前经历了一些不同的尝试。
https://forum.unity.com/threads/additive-scene-loading-with-unet-conflicting-sceneids-on-scene-objects.525410/#post-3545410
上述就是C#学习教程:Unity Networking-UNet中的加法场景加载分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1005080.html