@@ -2316,7 +2316,7 @@ private void OnTransformParentChanged()
23162316 // we call CheckOrphanChildren() method and quickly iterate over OrphanChildren set and see if we can reparent/adopt one.
23172317 internal static HashSet < NetworkObject > OrphanChildren = new HashSet < NetworkObject > ( ) ;
23182318
2319- internal bool ApplyNetworkParenting ( bool removeParent = false , bool ignoreNotSpawned = false , bool orphanedChildPass = false , bool silentParenting = false )
2319+ internal bool ApplyNetworkParenting ( bool removeParent = false , bool ignoreNotSpawned = false , bool orphanedChildPass = false , bool enableNotification = true )
23202320 {
23212321 if ( ! AutoObjectParentSync )
23222322 {
@@ -2389,7 +2389,7 @@ internal bool ApplyNetworkParenting(bool removeParent = false, bool ignoreNotSpa
23892389 // to WorldPositionStays which can cause scaling issues if the parent's
23902390 // scale is not the default (Vetctor3.one) value.
23912391 transform . SetParent ( null , m_CachedWorldPositionStays ) ;
2392- if ( ! silentParenting )
2392+ if ( enableNotification )
23932393 {
23942394 InvokeBehaviourOnNetworkObjectParentChanged ( null ) ;
23952395 }
@@ -2417,7 +2417,7 @@ internal bool ApplyNetworkParenting(bool removeParent = false, bool ignoreNotSpa
24172417 }
24182418 SetCachedParent ( parentObject . transform ) ;
24192419 transform . SetParent ( parentObject . transform , m_CachedWorldPositionStays ) ;
2420- if ( ! silentParenting )
2420+ if ( enableNotification )
24212421 {
24222422 InvokeBehaviourOnNetworkObjectParentChanged ( parentObject ) ;
24232423 }
@@ -3057,6 +3057,8 @@ internal SceneObject GetMessageSceneObject(ulong targetClientId = NetworkManager
30573057 {
30583058 var obj = new SceneObject
30593059 {
3060+ HasParent = transform . parent != null ,
3061+ WorldPositionStays = m_CachedWorldPositionStays ,
30603062 NetworkObjectId = NetworkObjectId ,
30613063 OwnerClientId = OwnerClientId ,
30623064 IsPlayerObject = IsPlayerObject ,
@@ -3073,31 +3075,16 @@ internal SceneObject GetMessageSceneObject(ulong targetClientId = NetworkManager
30733075 TargetClientId = targetClientId
30743076 } ;
30753077
3076- NetworkObject parentNetworkObject = null ;
3077-
3078- if ( ! AlwaysReplicateAsRoot && transform . parent != null )
3078+ // Handle Parenting
3079+ if ( ! AlwaysReplicateAsRoot && obj . HasParent )
30793080 {
3080- parentNetworkObject = transform . parent . GetComponent < NetworkObject > ( ) ;
3081- // In-scene placed NetworkObjects parented under GameObjects with no NetworkObject
3082- // should set the has parent flag and preserve the world position stays value
3083- if ( parentNetworkObject == null && obj . IsSceneObject )
3084- {
3085- obj . HasParent = true ;
3086- obj . WorldPositionStays = m_CachedWorldPositionStays ;
3087- }
3088- }
3081+ var parentNetworkObject = transform . parent . GetComponent < NetworkObject > ( ) ;
30893082
3090- if ( parentNetworkObject != null )
3091- {
3092- obj . HasParent = true ;
3093- obj . ParentObjectId = parentNetworkObject . NetworkObjectId ;
3094- obj . WorldPositionStays = m_CachedWorldPositionStays ;
3095- var latestParent = GetNetworkParenting ( ) ;
3096- var isLatestParentSet = latestParent != null && latestParent . HasValue ;
3097- obj . IsLatestParentSet = isLatestParentSet ;
3098- if ( isLatestParentSet )
3083+ if ( parentNetworkObject )
30993084 {
3100- obj . LatestParent = latestParent . Value ;
3085+ obj . ParentObjectId = parentNetworkObject . NetworkObjectId ;
3086+ obj . LatestParent = GetNetworkParenting ( ) ;
3087+ obj . IsLatestParentSet = obj . LatestParent != null && obj . LatestParent . HasValue ;
31013088 }
31023089 }
31033090
@@ -3186,7 +3173,6 @@ internal static NetworkObject AddSceneObject(in SceneObject sceneObject, FastBuf
31863173 // Synchronize NetworkBehaviours
31873174 var bufferSerializer = new BufferSerializer < BufferSerializerReader > ( new BufferSerializerReader ( reader ) ) ;
31883175 networkObject . SynchronizeNetworkBehaviours ( ref bufferSerializer , networkManager . LocalClientId ) ;
3189- Debug . Log ( $ "Spawning { networkObject . name } ") ;
31903176
31913177 // If we are an in-scene placed NetworkObject and we originally had a parent but when synchronized we are
31923178 // being told we do not have a parent, then we want to clear the latest parent so it is not automatically
0 commit comments