Skip to content

Can use Don't destroy on load on in scene networkObjects #3402

@Urganway

Description

@Urganway

Is your feature request related to a problem? Please describe.

I'm trying to make a persistent Manager object in my game using single scenes but the DontDestroyOnLoad Method does not work as the documentation suggests here :

Instead it throw this error :

Exception: PlayerDataManager tried to registered with ScenePlacedObjects which already contains the same GlobalObjectIdHash value 281576103 for PlayerDataManager! Unity.Netcode.NetworkSceneManager.PopulateScenePlacedObjects (UnityEngine.SceneManagement.Scene sceneToFilterBy, System.Boolean clearScenePlacedObjects) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/SceneManagement/NetworkSceneManager.cs:2835) Unity.Netcode.NetworkSpawnManager.ServerSpawnSceneObjectsOnStartSweep () (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Spawning/NetworkSpawnManager.cs:1457) Unity.Netcode.NetworkManager.HostServerInitialize () (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkManager.cs:1523) Unity.Netcode.NetworkManager.StartHost () (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkManager.cs:1474) UnityEngine.Debug:LogException(Exception) Unity.Netcode.NetworkManager:StartHost() (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkManager.cs:1479) Unity.Services.Multiplayer.GameObjectsNetcodeNetworkHandler:StartAsHost() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/Handlers/Connection/GameObjectsNetcodeNetworkHandler.cs:174) Unity.Services.Multiplayer.GameObjectsNetcodeNetworkHandler:SetupRelay(NetworkConfiguration) (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/Handlers/Connection/GameObjectsNetcodeNetworkHandler.cs:113) Unity.Services.Multiplayer.GameObjectsNetcodeNetworkHandler:StartAsync(NetworkConfiguration) (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/Handlers/Connection/GameObjectsNetcodeNetworkHandler.cs:26) Unity.Services.Multiplayer.<SetupConnectionAsync>d__31:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/ConnectionModule.cs:315) System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start(<SetupConnectionAsync>d__31&) Unity.Services.Multiplayer.ConnectionModule:SetupConnectionAsync(NetworkConfiguration) Unity.Services.Multiplayer.<CreateConnectionAsync>d__26:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/ConnectionModule.cs:138) System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult() Unity.Services.Multiplayer.<FetchJoinCodeAsync>d__18:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Multiplayer/Modules/Connection/Handlers/Relay/RelayHandler.cs:106) System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(String)
Unity.Services.Relay.d__11:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/SDK/WrappedRelayService.cs:134)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(Response1)
Unity.Services.Relay.Apis.RelayAllocations.d__8:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Apis/RelayAllocationsApi.cs:160)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(HttpClientResponse) Unity.Services.Relay.Http.<MakeRequestAsync>d__1:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Http/HttpClient.cs:41) System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(HttpClientResponse)
Unity.Services.Relay.Http.d__3:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Http/HttpClient.cs:56)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(HttpClientResponse) Unity.Services.Relay.Http.<CreateHttpClientResponse>d__4:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Http/HttpClient.cs:84) System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(HttpClientResponse)
Unity.Services.Relay.Http.<b__0>d:MoveNext() (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Http/HttpClient.cs:81)
System.Threading.Tasks.TaskCompletionSource1:SetResult(HttpClientResponse) Unity.Services.Relay.Http.<>c__DisplayClass0_0:<GetAwaiter>b__0(AsyncOperation) (at ./Library/PackageCache/com.unity.services.multiplayer@124598b145d4/Runtime/Relay/Http/UnityWebRequestHelpers.cs:34) UnityEngine.AsyncOperation:InvokeCompletionEvent()

Describe the solution you'd like

Either DontDestroyOnLoad can be called on in-scene NetworkObjects without error
Or Update the documentation to not tell it works this way and propose a suitable solution for Netcode Managers

Describe alternatives you've considered

I'm currently spawning my manager as suggested for the "hybrid approach", which works, but this feels not right for this purpose since in the doc it says that i can have my netcode manager as an in-scene object and the "hybride approch" is not for this purpose specificaly.

Additional context

The Manager is a PlayerDataManager which spawns, stores and gives access to playerData components which contains elements needed in both Menu and Game scenes (and can't be separated)

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:supportQuestions or other support

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions