Подтвердить что ты не робот

Загрузка аддитивной сцены в Unity Networking-UNet

Краткое описание.. Я загружаю Additive Scene в моей основной сцене, ее загружаемый файл, но Additive scene GameObject (который содержит Сетевая идентификация Компонент) становится отключенным.

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

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

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

Все объекты в сцене с компонентом NetworkIdentity будут отключается при загрузке сцены; как на клиенте, так и на сервере. Затем , когда сцена полностью загружена, NetworkServer.SpawnObjects() является для активации этих сетевых объектов сцены. Это будет сделано автоматически с помощью NetworkManager, когда сцена сервера заканчивается загрузка - или может быть вызвана непосредственно с помощью кода пользователя.

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

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

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

Объект сцены вскрытия не найден для 1 Объект сцены небытия не найден для 2 Объект сцены вскрытия не найден для 3......,.

Помогает ли мне чемпион Unet?

EDIT/UPDATED Подход:

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

Ошибка:

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
4b9b3361

Ответ 1

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

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