Краткое описание.. Я загружаю 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