Unity Networking UNet中的附加场景加载



简短描述:我正在主场景中加载一个附加场景,它的加载很好,但附加场景的GameObject(包含网络标识组件)将禁用

详细信息:我正在通过此代码加载一个附加场景,以便将附加场景加载到我的服务器和所有工作正常的客户端中:

[ClientRpc]
public void RpcLoadLevelAcrossNetwork() {
SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);    
}

尽管它已经将我的场景加载到客户端/服务器中,但具有网络标识的对象被禁用(这是默认行为,因为我检查了UnityUNetSceneObjects,它声明:

场景中具有NetworkIdentity组件的所有对象都将加载场景时禁用;在客户端和服务器上。然后,当场景完全加载时,NetworkServer.SpawnObjects()为调用以激活这些联网的场景对象。这将完成在服务器场景结束时由NetworkManager自动执行加载-或者可以由用户代码直接调用。

正如文档所述,它将自动激活网络标识对象,但在我的上下文中没有发生。我的场景加载很好,但其网络标识对象未处于活动状态。

我做错了什么?

我还试图通过在新加载的场景中调用NetworkServer.SpawnObjects()来激活我自己的对象,但它只在服务器端生成对象,同时在客户端上显示错误

未找到1的生成场景对象找不到2的繁殖场景对象未找到3…..…的繁殖场景对象

联合国教科文组织冠军能帮我吗?

编辑/更新方法:

我已经根据统一论坛讨论更改了我的代码,用于添加场景加载,它在服务器上加载我的添加场景时出错(如下所示),并且我的客户端的场景网络标识对象仍然被禁用:

错误:

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<NetworkConnection> networkConnectionList = FindObjectOfType<MyNetworkManagerWithVR>().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

这里的聚会迟到了,但我也遇到了这个问题,并在这里提出了自己的解决方案:

https://gist.github.com/kristianpd/485fd7d78512a22a80117a2d22664185

问题的核心是场景ID在NetworkIdentityS上重复使用,当您加载另一个场景时,它将与当前NetworkIdentity.sceneIds冲突。

为了了解更多关于解决方案的内容,我在论坛上做了一些不同的尝试,然后才找到这个解决方案。

https://forum.unity.com/threads/additive-scene-loading-with-unet-conflicting-sceneids-on-scene-objects.525410/#post-3545410

您解决过这个问题吗?

我的猜测是,在调用SpawnObjects之前,您需要等待所有客户端都"就绪"(场景加载完成)。

最新更新