@@ -72,10 +72,10 @@ internal static void ChangeOwnership(uint netId, uint clientId)
7272 InternalMessageHandler . Send ( "MLAPI_CHANGE_OWNER" , "MLAPI_INTERNAL" , writer , null ) ;
7373 }
7474 }
75-
75+
7676 internal static void DestroyNonSceneObjects ( )
7777 {
78- if ( spawnedObjects != null )
78+ if ( spawnedObjects != null )
7979 {
8080 foreach ( KeyValuePair < uint , NetworkedObject > netObject in spawnedObjects )
8181 {
@@ -102,7 +102,7 @@ internal static void MarkSceneObjects()
102102 {
103103 if ( netObjects [ i ] . sceneObject == null )
104104 {
105- netObjects [ i ] . InvokeBehaviourNetworkSpawn ( ) ;
105+ netObjects [ i ] . InvokeBehaviourNetworkSpawn ( null ) ;
106106 netObjects [ i ] . sceneObject = true ;
107107 }
108108 }
@@ -152,7 +152,7 @@ internal static void FlushSceneObjects()
152152 }
153153 }
154154
155- internal static GameObject CreateSpawnedObject ( int networkedPrefabId , uint networkId , uint owner , bool playerObject , Vector3 position , Quaternion rotation , BitReader reader = null )
155+ internal static GameObject CreateSpawnedObject ( int networkedPrefabId , uint networkId , uint owner , bool playerObject , Vector3 position , Quaternion rotation , BitReader reader , bool readSyncedVar , bool readPayload )
156156 {
157157 if ( ! netManager . NetworkConfig . NetworkPrefabNames . ContainsKey ( networkedPrefabId ) )
158158 {
@@ -168,8 +168,7 @@ internal static GameObject CreateSpawnedObject(int networkedPrefabId, uint netwo
168168 netObject = go . AddComponent < NetworkedObject > ( ) ;
169169 }
170170
171- if ( reader != null )
172- netObject . SetFormattedSyncedVarData ( reader ) ;
171+ if ( readSyncedVar ) netObject . SetFormattedSyncedVarData ( reader ) ;
173172
174173 netObject . NetworkedPrefabName = netManager . NetworkConfig . NetworkPrefabNames [ networkedPrefabId ] ;
175174 netObject . _isSpawned = true ;
@@ -184,7 +183,7 @@ internal static GameObject CreateSpawnedObject(int networkedPrefabId, uint netwo
184183 netObject . transform . position = position ;
185184 netObject . transform . rotation = rotation ;
186185 spawnedObjects . Add ( netObject . NetworkId , netObject ) ;
187- netObject . InvokeBehaviourNetworkSpawn ( ) ;
186+ netObject . InvokeBehaviourNetworkSpawn ( reader ) ;
188187 return go ;
189188 }
190189
@@ -195,7 +194,7 @@ internal static void UnSpawnObject(NetworkedObject netObject)
195194 if ( LogHelper . CurrentLogLevel <= LogLevel . Normal ) LogHelper . LogWarning ( "Cannot unspawn objects that are not spawned" ) ;
196195 return ;
197196 }
198- else if ( ! netManager . isServer )
197+ else if ( ! netManager . isServer )
199198 {
200199 if ( LogHelper . CurrentLogLevel <= LogLevel . Normal ) LogHelper . LogWarning ( "Only server can unspawn objects" ) ;
201200 return ;
@@ -209,7 +208,7 @@ internal static void UnSpawnObject(NetworkedObject netObject)
209208 OnDestroyObject ( netObject . networkId , false ) ;
210209 }
211210
212- internal static void SpawnObject ( NetworkedObject netObject , uint ? clientOwnerId = null )
211+ internal static void SpawnObject ( NetworkedObject netObject , uint ? clientOwnerId = null , BitWriter payload = null )
213212 {
214213 if ( netObject . isSpawned )
215214 {
@@ -236,7 +235,9 @@ internal static void SpawnObject(NetworkedObject netObject, uint? clientOwnerId
236235 spawnedObjects . Add ( netId , netObject ) ;
237236 netObject . _isSpawned = true ;
238237 netObject . sceneObject = false ;
239- netObject . InvokeBehaviourNetworkSpawn ( ) ;
238+ if ( payload == null ) netObject . InvokeBehaviourNetworkSpawn ( null ) ;
239+ else using ( BitReader payloadReader = BitReader . Get ( payload . Finalize ( ) ) ) netObject . InvokeBehaviourNetworkSpawn ( payloadReader ) ;
240+
240241 if ( clientOwnerId != null )
241242 {
242243 netObject . ownerClientId = clientOwnerId . Value ;
@@ -261,9 +262,13 @@ internal static void SpawnObject(NetworkedObject netObject, uint? clientOwnerId
261262 writer . WriteFloat ( netObject . transform . rotation . eulerAngles . y ) ;
262263 writer . WriteFloat ( netObject . transform . rotation . eulerAngles . z ) ;
263264
265+ writer . WriteBool ( payload != null ) ;
266+
264267 if ( netObject . observers . Contains ( client . Key ) )
265268 netObject . WriteFormattedSyncedVarData ( writer ) ;
266269
270+ if ( payload != null ) writer . WriteWriter ( payload ) ;
271+
267272 InternalMessageHandler . Send ( client . Key , "MLAPI_ADD_OBJECT" , "MLAPI_INTERNAL" , writer , null ) ;
268273 }
269274 }
0 commit comments