2017-01-28 13 views
12

Краткое описание: Я нагружать Добавка Сцена в моей главной сцене, его загрузка хорошо, но GameObject аддитивных сцены (которые содержат Сетевая идентификация компонента) являются становится отключение ,Добавка загрузка сцены в Unity Networking-UNET

Деталь: Я загрузка аддитивной сцены через этот код, чтобы добавка сцена стала нагрузкой на мой сервер и все клиенты, которые работают отлично:

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

Хотя он загрузил свою сцену в клиент/сервер, но объект, которые с network identity являются отключения (это поведение по умолчанию, как я проверил Unity UNetSceneObjects, который гласит, что:

All objects in the scene with a NetworkIdentity component will be disabled when the scene is loaded; on both the client and the server. Then, when the scene is fully loaded, NetworkServer.SpawnObjects() is called to activate these networked scene objects. This will be done automatically by the NetworkManager when the server scene finishes loading - or can be called directly by user code.

В документации указано, что он автоматически активирует объекты Network Identity, но это не произошло в моем контексте. Моя загрузка сцены прекрасна, но ее объекты идентификации сети неактивны.

Что я делаю неправильно?

Я также попытался активировать объект моих сам через вызывая NetworkServer.SpawnObjects() в моей новой загруженной сцене, но это только порождая объект на стороне сервера, показывая ошибку на клиенте

Spawn scene object not found for 1 Spawn scene object not found for 2 Spawn scene object not found for 3..... . . .

Может ли Champion Unet помощи меня?

EDIT/ОБНОВЛЕНО подход:

Я изменил код в соответствии с unity forum discussion для аддитивной загрузки сцены, его загрузка моей аддитивной сцены на сервере с ошибкой (приводимой ниже) и до сих пор идентичностью сцены сети моей стороны клиента в объекты отключены:

Ошибка:

Ready() called with invalid connection object: 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 
+0

Я ничего не знаю о единстве3d или другом материале, с которым вы работаете, но «SceneManager.LoadSceneAsync» выглядит подозрительно для меня. Разве вы не должны работать с возвращенным «AsyncOperation» каким-то образом, чтобы определить результат загрузки? – grek40

+0

@ grek40 Я думаю, что в этой строке нет проблем, ее загрузка сцены прекрасна. –

+0

Справедливо, поэтому единственный код, который включен в ваш вопрос, - это 3-лайнер, где вы уверены, что это не проблема. Как сказано, я не могу комментировать технические детали, только убедитесь, что основы не ошибаются. Итак, как насчет того, что вы храните «AsyncOperation» где-то только для того, чтобы убедиться, что его свойство isDone действительно установлено в то время, когда вы думаете. – grek40

ответ

0

Вы когда-нибудь решали это?

Предполагалось, что перед вызовом SpawnObjects вам нужно будет дождаться, пока все клиенты будут «готовы» (загрузка сцены закончена).

+0

Спасибо за то, что вы commens, но это не место в нужном месте :). Я еще не решил эту проблему. Все еще желая его решения. Да, я пробовал это, вы проверили мой код? –