@@ -2303,146 +2303,146 @@ private void HandleClientSceneEvent(uint sceneEventId)
23032303 break ;
23042304 }
23052305 case SceneEventType . Synchronize :
2306- {
2307- if ( sceneEventData . IsStartingSynchronization )
23082306 {
2309- sceneEventData . IsStartingSynchronization = false ;
2310-
2311- OnSceneEvent ? . Invoke ( new SceneEvent ( )
2307+ if ( sceneEventData . IsStartingSynchronization )
23122308 {
2313- SceneEventType = SceneEventType . Synchronize ,
2314- ClientId = NetworkManager . LocalClientId ,
2315- } ) ;
2309+ sceneEventData . IsStartingSynchronization = false ;
23162310
2317- OnSynchronize ? . Invoke ( NetworkManager . LocalClientId ) ;
2318- }
2311+ OnSceneEvent ? . Invoke ( new SceneEvent ( )
2312+ {
2313+ SceneEventType = SceneEventType . Synchronize ,
2314+ ClientId = NetworkManager . LocalClientId ,
2315+ } ) ;
23192316
2320- if ( ! sceneEventData . IsDoneWithSynchronization ( ) )
2321- {
2322- OnClientBeginSync ( sceneEventId ) ;
2323- }
2324- else
2325- {
2326- // Include anything in the DDOL scene
2327- PopulateScenePlacedObjects ( DontDestroyOnLoadScene , false ) ;
2317+ OnSynchronize ? . Invoke ( NetworkManager . LocalClientId ) ;
2318+ }
23282319
2329- // If needed, set the currently active scene
2330- if ( HashToBuildIndex . ContainsKey ( sceneEventData . ActiveSceneHash ) )
2320+ if ( ! sceneEventData . IsDoneWithSynchronization ( ) )
2321+ {
2322+ OnClientBeginSync ( sceneEventId ) ;
2323+ }
2324+ else
23312325 {
2332- var targetActiveScene = SceneManager . GetSceneByBuildIndex ( HashToBuildIndex [ sceneEventData . ActiveSceneHash ] ) ;
2333- if ( targetActiveScene . isLoaded && targetActiveScene . handle != SceneManager . GetActiveScene ( ) . handle )
2326+ // Include anything in the DDOL scene
2327+ PopulateScenePlacedObjects ( DontDestroyOnLoadScene , false ) ;
2328+
2329+ // If needed, set the currently active scene
2330+ if ( HashToBuildIndex . ContainsKey ( sceneEventData . ActiveSceneHash ) )
23342331 {
2335- SceneManager . SetActiveScene ( targetActiveScene ) ;
2332+ var targetActiveScene = SceneManager . GetSceneByBuildIndex ( HashToBuildIndex [ sceneEventData . ActiveSceneHash ] ) ;
2333+ if ( targetActiveScene . isLoaded && targetActiveScene . handle != SceneManager . GetActiveScene ( ) . handle )
2334+ {
2335+ SceneManager . SetActiveScene ( targetActiveScene ) ;
2336+ }
23362337 }
2337- }
23382338
2339- // Spawn and Synchronize all NetworkObjects
2340- sceneEventData . SynchronizeSceneNetworkObjects ( NetworkManager ) ;
2339+ // Spawn and Synchronize all NetworkObjects
2340+ sceneEventData . SynchronizeSceneNetworkObjects ( NetworkManager ) ;
23412341
2342- // If needed, migrate dynamically spawned NetworkObjects to the same scene as they are on the server
2343- SynchronizeNetworkObjectScene ( ) ;
2342+ // If needed, migrate dynamically spawned NetworkObjects to the same scene as they are on the server
2343+ SynchronizeNetworkObjectScene ( ) ;
23442344
2345- // Process any pending create object messages that the client received during synchronization
2346- ProcessDeferredCreateObjectMessages ( ) ;
2345+ // Process any pending create object messages that the client received during synchronization
2346+ ProcessDeferredCreateObjectMessages ( ) ;
23472347
2348- sceneEventData . SceneEventType = SceneEventType . SynchronizeComplete ;
2349- if ( NetworkManager . DistributedAuthorityMode )
2350- {
2351- sceneEventData . TargetClientId = NetworkManager . CurrentSessionOwner ;
2352- sceneEventData . SenderClientId = NetworkManager . LocalClientId ;
2353- var message = new SceneEventMessage
2348+ sceneEventData . SceneEventType = SceneEventType . SynchronizeComplete ;
2349+ if ( NetworkManager . DistributedAuthorityMode )
23542350 {
2355- EventData = sceneEventData ,
2356- } ;
2357- var target = NetworkManager . DAHost ? NetworkManager . CurrentSessionOwner : NetworkManager . ServerClientId ;
2358- var size = NetworkManager . ConnectionManager . SendMessage ( ref message , m_NetworkDelivery , target ) ;
2359- NetworkManager . NetworkMetrics . TrackSceneEventSent ( target , ( uint ) sceneEventData . SceneEventType , SceneNameFromHash ( sceneEventData . SceneHash ) , size ) ;
2360- }
2361- else
2362- {
2363- SendSceneEventData ( sceneEventId , new ulong [ ] { NetworkManager . ServerClientId } ) ;
2364- }
2351+ sceneEventData . TargetClientId = NetworkManager . CurrentSessionOwner ;
2352+ sceneEventData . SenderClientId = NetworkManager . LocalClientId ;
2353+ var message = new SceneEventMessage
2354+ {
2355+ EventData = sceneEventData ,
2356+ } ;
2357+ var target = NetworkManager . DAHost ? NetworkManager . CurrentSessionOwner : NetworkManager . ServerClientId ;
2358+ var size = NetworkManager . ConnectionManager . SendMessage ( ref message , m_NetworkDelivery , target ) ;
2359+ NetworkManager . NetworkMetrics . TrackSceneEventSent ( target , ( uint ) sceneEventData . SceneEventType , SceneNameFromHash ( sceneEventData . SceneHash ) , size ) ;
2360+ }
2361+ else
2362+ {
2363+ SendSceneEventData ( sceneEventId , new ulong [ ] { NetworkManager . ServerClientId } ) ;
2364+ }
23652365
2366- // All scenes are synchronized, let the server know we are done synchronizing
2367- NetworkManager . IsConnectedClient = true ;
2366+ // All scenes are synchronized, let the server know we are done synchronizing
2367+ NetworkManager . IsConnectedClient = true ;
23682368
2369- // With distributed authority, either the client-side automatically spawns the default assigned player prefab or
2370- // if AutoSpawnPlayerPrefabClientSide is disabled the client-side will determine what player prefab to spawn and
2371- // when it gets spawned.
2372- if ( NetworkManager . DistributedAuthorityMode && NetworkManager . AutoSpawnPlayerPrefabClientSide )
2373- {
2374- NetworkManager . ConnectionManager . CreateAndSpawnPlayer ( NetworkManager . LocalClientId ) ;
2375- }
2369+ // With distributed authority, either the client-side automatically spawns the default assigned player prefab or
2370+ // if AutoSpawnPlayerPrefabClientSide is disabled the client-side will determine what player prefab to spawn and
2371+ // when it gets spawned.
2372+ if ( NetworkManager . DistributedAuthorityMode && NetworkManager . AutoSpawnPlayerPrefabClientSide )
2373+ {
2374+ NetworkManager . ConnectionManager . CreateAndSpawnPlayer ( NetworkManager . LocalClientId ) ;
2375+ }
23762376
2377- // Process any SceneEventType.ObjectSceneChanged messages that
2378- // were deferred while synchronizing and migrate the associated
2379- // NetworkObjects to their newly assigned scenes.
2380- sceneEventData . ProcessDeferredObjectSceneChangedEvents ( ) ;
2377+ // Process any SceneEventType.ObjectSceneChanged messages that
2378+ // were deferred while synchronizing and migrate the associated
2379+ // NetworkObjects to their newly assigned scenes.
2380+ sceneEventData . ProcessDeferredObjectSceneChangedEvents ( ) ;
23812381
2382- // Only if PostSynchronizationSceneUnloading is set and we are running in client synchronization
2383- // mode additive do we unload any remaining scene that was not synchronized (otherwise any loaded
2384- // scene not synchronized by the server will remain loaded)
2385- if ( PostSynchronizationSceneUnloading && ClientSynchronizationMode == LoadSceneMode . Additive )
2386- {
2387- SceneManagerHandler . UnloadUnassignedScenes ( NetworkManager ) ;
2388- }
2382+ // Only if PostSynchronizationSceneUnloading is set and we are running in client synchronization
2383+ // mode additive do we unload any remaining scene that was not synchronized (otherwise any loaded
2384+ // scene not synchronized by the server will remain loaded)
2385+ if ( PostSynchronizationSceneUnloading && ClientSynchronizationMode == LoadSceneMode . Additive )
2386+ {
2387+ SceneManagerHandler . UnloadUnassignedScenes ( NetworkManager ) ;
2388+ }
23892389
2390- // Client is now synchronized and fully "connected". This also means the client can send "RPCs" at this time
2391- NetworkManager . ConnectionManager . InvokeOnClientConnectedCallback ( NetworkManager . LocalClientId ) ;
2390+ // Client is now synchronized and fully "connected". This also means the client can send "RPCs" at this time
2391+ NetworkManager . ConnectionManager . InvokeOnClientConnectedCallback ( NetworkManager . LocalClientId ) ;
23922392
2393- // Notify the client that they have finished synchronizing
2394- OnSceneEvent ? . Invoke ( new SceneEvent ( )
2395- {
2396- SceneEventType = sceneEventData . SceneEventType ,
2397- ClientId = NetworkManager . LocalClientId , // Client sent this to the server
2398- } ) ;
2393+ // Notify the client that they have finished synchronizing
2394+ OnSceneEvent ? . Invoke ( new SceneEvent ( )
2395+ {
2396+ SceneEventType = sceneEventData . SceneEventType ,
2397+ ClientId = NetworkManager . LocalClientId , // Client sent this to the server
2398+ } ) ;
23992399
2400- OnSynchronizeComplete ? . Invoke ( NetworkManager . LocalClientId ) ;
2400+ OnSynchronizeComplete ? . Invoke ( NetworkManager . LocalClientId ) ;
24012401
2402- if ( NetworkLog . CurrentLogLevel <= LogLevel . Developer )
2403- {
2404- NetworkLog . LogInfo ( $ "[Client-{ NetworkManager . LocalClientId } ][Scene Management Enabled] Synchronization complete!") ;
2405- }
2406- // For convenience, notify all NetworkBehaviours that synchronization is complete.
2407- NetworkManager . SpawnManager . NotifyNetworkObjectsSynchronized ( ) ;
2402+ if ( NetworkLog . CurrentLogLevel <= LogLevel . Developer )
2403+ {
2404+ NetworkLog . LogInfo ( $ "[Client-{ NetworkManager . LocalClientId } ][Scene Management Enabled] Synchronization complete!") ;
2405+ }
2406+ // For convenience, notify all NetworkBehaviours that synchronization is complete.
2407+ NetworkManager . SpawnManager . NotifyNetworkObjectsSynchronized ( ) ;
24082408
2409- if ( NetworkManager . DistributedAuthorityMode && HasSceneAuthority ( ) && IsRestoringSession )
2410- {
2411- IsRestoringSession = false ;
2412- PostSynchronizationSceneUnloading = m_OriginalPostSynchronizationSceneUnloading ;
2409+ if ( NetworkManager . DistributedAuthorityMode && HasSceneAuthority ( ) && IsRestoringSession )
2410+ {
2411+ IsRestoringSession = false ;
2412+ PostSynchronizationSceneUnloading = m_OriginalPostSynchronizationSceneUnloading ;
2413+ }
2414+
2415+ EndSceneEvent ( sceneEventId ) ;
24132416 }
2417+ break ;
2418+ }
2419+ case SceneEventType . ReSynchronize :
2420+ {
2421+ // Notify the local client that they have been re-synchronized after being synchronized with an in progress game session
2422+ OnSceneEvent ? . Invoke ( new SceneEvent ( )
2423+ {
2424+ SceneEventType = sceneEventData . SceneEventType ,
2425+ ClientId = NetworkManager . ServerClientId , // Server sent this to client
2426+ } ) ;
24142427
24152428 EndSceneEvent ( sceneEventId ) ;
2429+ break ;
24162430 }
2417- break ;
2418- }
2419- case SceneEventType . ReSynchronize :
2420- {
2421- // Notify the local client that they have been re-synchronized after being synchronized with an in progress game session
2422- OnSceneEvent ? . Invoke ( new SceneEvent ( )
2431+ case SceneEventType . LoadEventCompleted :
2432+ case SceneEventType . UnloadEventCompleted :
24232433 {
2424- SceneEventType = sceneEventData . SceneEventType ,
2425- ClientId = NetworkManager . ServerClientId , // Server sent this to client
2426- } ) ;
2427-
2428- EndSceneEvent ( sceneEventId ) ;
2429- break ;
2430- }
2431- case SceneEventType . LoadEventCompleted :
2432- case SceneEventType . UnloadEventCompleted :
2433- {
2434- // Notify the local client that all clients have finished loading or unloading
2435- var clientId = NetworkManager . CMBServiceConnection ? NetworkManager . CurrentSessionOwner : NetworkManager . ServerClientId ;
2436- InvokeSceneEvents ( clientId , sceneEventData ) ;
2434+ // Notify the local client that all clients have finished loading or unloading
2435+ var clientId = NetworkManager . CMBServiceConnection ? NetworkManager . CurrentSessionOwner : NetworkManager . ServerClientId ;
2436+ InvokeSceneEvents ( clientId , sceneEventData ) ;
24372437
2438- EndSceneEvent ( sceneEventId ) ;
2439- break ;
2440- }
2441- default :
2442- {
2443- Debug . LogWarning ( $ "{ sceneEventData . SceneEventType } is not currently supported!") ;
2444- break ;
2445- }
2438+ EndSceneEvent ( sceneEventId ) ;
2439+ break ;
2440+ }
2441+ default :
2442+ {
2443+ Debug . LogWarning ( $ "{ sceneEventData . SceneEventType } is not currently supported!") ;
2444+ break ;
2445+ }
24462446 }
24472447 }
24482448
0 commit comments