2017-01-15 50 views
1

在网络游戏项目从Unity Multiplayer Tutorial,如何一个应该去改变的场面,到一个新的水平/地图,同时保持相机在一个总体的主/播放器GO /健康等下面就现场。 (例如Gameplay.unity与Level1.unity或Level2.unity添加到它)团结5.3+网络负载下一级

所有相关的帮助似乎是遗留代码,单人的解决方案或更专业的情况。目前的Unity 5.5文档建议ServerChangeScene - 这似乎只提供了一半的解决方案。

是否有类似ServerAddSceneServerGetScene是否存在?

尝试的解决方案一直在使用DontDestroyOnLoad在主场景知GameObjects并保持currentMapNumber变量客户NetworkManagers当玩家达到最终的级别触发器被更新保持同步。这然后在更新()方法检查和如预期或者调用

networkManager.ServerChangeScene("Level" + networkManager.GetComponent<NetGame>().mapNumber); 

SceneManager.LoadScene("Level" + networkManager.GetComponent<NetGame>().mapNumber, LoadSceneMode.Additive); 

均未工作。

+0

嗨rogod你找到任何解决方案。我也在寻找在整体netwrok加法场景加载 –

+0

尚未 - 我知道有很多人有这个问题,但没有人似乎有谁回答谁看到这个线程呢。 - 我的项目基本上处于搁置状态,直到我很好地解决了这个问题。 :( – Rogod

回答

0

我可以通过添加剂的场景加载我用这个代码来做到这一点。

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

ClientRpc将会加载新的场景到所有连接的客户端和添加剂场景加载将允许你保存相机/播放器GO /健康等

+0

虽然这种方式有效,但它只加载没有NetworkIdentity的场景中的对象 为了达到期望的效果,似乎必须使用ServerChangeScene并将对象设置为DoNotDestroyOnLoad。 但是,必须确保只有服务器运行这个方法时,它通过SyncVar检测地图变更请求(在类似的场景经理脚本)。 总之,我现在的工作,但它并不像那样简单文件使它成为 – Rogod

+0

@ Rogod AH ..,这是我过去几天面临的问题,你说的没错,networkidentiy对象没有加载我的代码,我该如何改正它? stackoverflow.com/questions/41909305/spawn-scene-object-not-found-for-1 –

+0

我不得不诉诸使用ServerChangeScene而不是这个,因为我不能找到一种方法来获取加载NetworkIdentity的对象。 我目前只是设置所有我想保持DoNotDestroyOnLoad和使用ServerChangeScene。 – Rogod