2017-01-15 8 views
1

В сетевом игровом проекте, следующем за Unity Multiplayer Tutorial, как можно перейти к смене сцены на новый уровень/карту при сохранении камеры/игрока GO/health и т. Д. В одном всеобъемлющем хозяине место действия. (например, Gameplay.unity с добавлением Level1.unity или Level2.unity)Unity 5.3+ Networking Load Следующий уровень

Вся связанная справка, похоже, представляет собой устаревший код, однопользовательские решения или более специализированное обстоятельство. Текущая документация Unity 5.5 предлагает ServerChangeScene - который, по-видимому, обеспечивает половину решения.

ли существует что-то вроде ServerAddScene и ServerGetScene?

Покушение решения использовало DontDestroyOnLoad на известных геймобжектах в главной сцене и держать currentMapNumber переменным синхронизирован между клиентским NetworkManagers, который обновляется, когда игрок достигает триггера конца-уровня. Затем это проверяется в Update() метод и либо вызывает

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 не загружаются с моим кодом. Как это исправить? http: // stackoverflow.com/questions/41909305/spawn-scene-object-not-found-for-1 –

+0

Мне пришлось прибегать к использованию ServerChangeScene вместо этого, поскольку я не мог найти способ загрузки объектов с помощью NetworkIdentity. В настоящее время я просто устанавливаю все, что хочу сохранить как DoNotDestroyOnLoad, и используя ServerChangeScene. – Rogod