@@ -640,7 +640,7 @@ private void InternalOnOneTimeSetup()
640640 protected virtual IEnumerator OnSetup ( )
641641 {
642642#if UNIFIED_NETCODE
643- if ( m_AllPrefabsAsHybrid )
643+ if ( m_AllPrefabsAsHybrid )
644644 {
645645 NetworkSpawnManager . RegisterPendingGhost = RegisterPendingGhost ;
646646 }
@@ -659,7 +659,7 @@ protected virtual IEnumerator OnSetup()
659659 protected virtual void OnInlineSetup ( )
660660 {
661661#if UNIFIED_NETCODE
662- if ( m_AllPrefabsAsHybrid )
662+ if ( m_AllPrefabsAsHybrid )
663663 {
664664 NetworkSpawnManager . RegisterPendingGhost = RegisterPendingGhost ;
665665 }
@@ -867,7 +867,20 @@ protected void CreateServerAndClients(int numberOfClients)
867867 {
868868 manager . NetworkConfig . PlayerPrefab = m_PlayerPrefab ;
869869 SetDistributedAuthorityProperties ( manager ) ;
870+ #if UNIFIED_NETCODE
871+ foreach ( var pendingPrefab in m_PendingPrefabs )
872+ {
873+ var prefab = new NetworkPrefab ( )
874+ {
875+ Prefab = pendingPrefab
876+ } ;
877+ manager . NetworkConfig . Prefabs . Add ( prefab ) ;
878+ }
879+ #endif
870880 }
881+ #if UNIFIED_NETCODE
882+ m_PendingPrefabs . Clear ( ) ;
883+ #endif
871884
872885 // Provides opportunity to allow child derived classes to
873886 // modify the NetworkManager's configuration before starting.
@@ -1662,8 +1675,9 @@ protected IEnumerator CoroutineShutdownAndCleanUp()
16621675 protected void UnifiedCleanup ( )
16631676 {
16641677#if UNIFIED_NETCODE
1665- if ( m_AllPrefabsAsHybrid )
1678+ if ( m_AllPrefabsAsHybrid )
16661679 {
1680+ m_PendingPrefabs . Clear ( ) ;
16671681 NetworkSpawnManager . RegisterPendingGhost = null ;
16681682 CleanupPrefabReferences ( ) ;
16691683 }
@@ -2298,6 +2312,8 @@ protected GameObject CreateNetworkObjectPrefab(string baseName)
22982312 }
22992313
23002314#if UNIFIED_NETCODE
2315+ // Pending prefabs declared before NetworkManagers instantiated
2316+ private List < GameObject > m_PendingPrefabs = new List < GameObject > ( ) ;
23012317 protected void CleanupPrefabReferences ( )
23022318 {
23032319 foreach ( var reference in Object . FindObjectsByType < GhostPrefabReference > ( ) )
@@ -2330,7 +2346,7 @@ protected GameObject CreateHybridPrefab(string baseName, bool moveToDDOL = true)
23302346 adapter . prefabReference = ScriptableObject . CreateInstance < GhostPrefabReference > ( ) ;
23312347 adapter . prefabReference . name = "GhostPrefabReference" ;
23322348 adapter . prefabReference . Prefab = gameObject ;
2333- adapter . prefabReference . Ghost = adapter ;
2349+
23342350 GhostPrefabReference . s_IsPostProcessing = false ;
23352351
23362352 // TODO: This might be part of the CreateHybridPrefab parameters
@@ -2368,19 +2384,27 @@ protected GameObject CreateHybridPrefab(string baseName, bool moveToDDOL = true)
23682384 Object . DontDestroyOnLoad ( gameObject ) ;
23692385 }
23702386 var authorityNetworkManager = GetAuthorityNetworkManager ( ) ;
2371- authorityNetworkManager . AddNetworkPrefab ( gameObject ) ;
2372- foreach ( var clientNetworkManager in m_ClientNetworkManagers )
2387+ if ( authorityNetworkManager == null )
23732388 {
2374- if ( clientNetworkManager == authorityNetworkManager )
2389+ m_PendingPrefabs . Add ( gameObject ) ;
2390+ }
2391+ else
2392+ {
2393+ authorityNetworkManager . AddNetworkPrefab ( gameObject ) ;
2394+ foreach ( var clientNetworkManager in m_ClientNetworkManagers )
23752395 {
2376- continue ;
2396+ if ( clientNetworkManager == authorityNetworkManager )
2397+ {
2398+ continue ;
2399+ }
2400+ clientNetworkManager . AddNetworkPrefab ( gameObject ) ;
23772401 }
2378- clientNetworkManager . AddNetworkPrefab ( gameObject ) ;
23792402 }
23802403 return gameObject ;
23812404 }
23822405#endif
23832406
2407+
23842408 /// <summary>
23852409 /// Overloaded method <see cref="SpawnObject(NetworkObject, NetworkManager, bool)"/>
23862410 /// </summary>
@@ -2598,7 +2622,7 @@ private void InitializeTestConfiguration(NetworkTopologyTypes networkTopologyTyp
25982622 }
25992623#if UNIFIED_NETCODE
26002624 m_UseHost = hostOrServer == HostOrServer . Host || hostOrServer == HostOrServer . DAHost || hostOrServer == HostOrServer . UnifiedHost ;
2601- m_AllPrefabsAsHybrid = ( hostOrServer == HostOrServer . UnifiedServer || hostOrServer == HostOrServer . UnifiedHost ) ;
2625+ m_AllPrefabsAsHybrid = ( hostOrServer == HostOrServer . UnifiedServer || hostOrServer == HostOrServer . UnifiedHost ) ;
26022626#else
26032627 m_UseHost = hostOrServer == HostOrServer . Host || hostOrServer == HostOrServer . DAHost ;
26042628#endif
0 commit comments