@@ -139,6 +139,29 @@ public Vector3 GetScale(Vector3 defaultScale)
139139 }
140140 }
141141
142+ public class SyncTransforms : SortedList < uint , TransformData > , INetSerializable
143+ {
144+ public void Serialize ( NetDataWriter writer )
145+ {
146+ writer . Put ( Count ) ;
147+ foreach ( var entry in this )
148+ {
149+ entry . Value . Serialize ( writer ) ;
150+ }
151+ }
152+
153+ public void Deserialize ( NetDataReader reader )
154+ {
155+ Clear ( ) ;
156+ int count = reader . GetInt ( ) ;
157+ for ( int i = 0 ; i < count ; ++ i )
158+ {
159+ TransformData entry = reader . Get < TransformData > ( ) ;
160+ Add ( entry . Tick , entry ) ;
161+ }
162+ }
163+ }
164+
142165 [ Header ( "Sync Settings" ) ]
143166 [ Tooltip ( "If this is TRUE, transform data will be sent from owner client to server to update to another clients" ) ]
144167 [ FormerlySerializedAs ( "ownerClientCanSendTransform" ) ]
@@ -172,7 +195,7 @@ public Vector3 GetScale(Vector3 defaultScale)
172195 private float _startInterpTime ;
173196 private float _endInterpTime ;
174197
175- private SortedList < uint , TransformData > _syncBuffers = new SortedList < uint , TransformData > ( ) ;
198+ private SyncTransforms _syncBuffers = new SyncTransforms ( ) ;
176199 private SortedList < uint , TransformData > _interpBuffers = new SortedList < uint , TransformData > ( ) ;
177200
178201 private LogicUpdater _logicUpdater = null ;
@@ -257,17 +280,17 @@ private void LogicUpdater_OnTick(LogicUpdater updater)
257280 if ( ! syncByOwnerClient && IsServer )
258281 {
259282 StoreSyncBuffer ( transformData ) ;
260- RPC ( ServerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers . Values . ToArray ( ) ) ;
283+ RPC ( ServerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers ) ;
261284 }
262285 else if ( syncByOwnerClient && IsOwnedByServer )
263286 {
264287 StoreSyncBuffer ( transformData ) ;
265- RPC ( ServerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers . Values . ToArray ( ) ) ;
288+ RPC ( ServerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers ) ;
266289 }
267290 else if ( syncByOwnerClient && IsOwnerClient )
268291 {
269292 StoreSyncBuffer ( transformData ) ;
270- RPC ( OwnerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers . Values . ToArray ( ) ) ;
293+ RPC ( OwnerSyncTransform , 0 , LiteNetLib . DeliveryMethod . Unreliable , _syncBuffers ) ;
271294 }
272295 }
273296
@@ -355,7 +378,7 @@ private void InterpolateTransform()
355378 }
356379
357380 [ ServerRpc ]
358- private void OwnerSyncTransform ( TransformData [ ] data )
381+ private void OwnerSyncTransform ( SyncTransforms data )
359382 {
360383 if ( ! syncByOwnerClient && IsServer )
361384 return ;
@@ -375,7 +398,7 @@ private void OwnerSyncTransform(TransformData[] data)
375398 }
376399
377400 [ AllRpc ]
378- private void ServerSyncTransform ( TransformData [ ] data )
401+ private void ServerSyncTransform ( SyncTransforms data )
379402 {
380403 if ( IsServer )
381404 return ;
@@ -393,18 +416,18 @@ private void ServerSyncTransform(TransformData[] data)
393416 }
394417 }
395418
396- private void StoreInterpolateBuffers ( TransformData [ ] data , int maxBuffers = 3 )
419+ private void StoreInterpolateBuffers ( SyncTransforms data , int maxBuffers = 3 )
397420 {
398421 foreach ( var entry in data )
399422 {
400- if ( _interpBuffers . ContainsKey ( entry . Tick ) )
423+ if ( _interpBuffers . ContainsKey ( entry . Key ) )
401424 continue ;
402- if ( entry . Extra != null )
425+ if ( entry . Value . Extra != null )
403426 {
404- s_ExtraReader . SetSource ( entry . Extra ) ;
405- onReadInterpBuffer ? . Invoke ( s_ExtraReader , entry . Tick ) ;
427+ s_ExtraReader . SetSource ( entry . Value . Extra ) ;
428+ onReadInterpBuffer ? . Invoke ( s_ExtraReader , entry . Key ) ;
406429 }
407- _interpBuffers . Add ( entry . Tick , entry ) ;
430+ _interpBuffers . Add ( entry . Key , entry . Value ) ;
408431 }
409432 // Prune old ticks (keep last N)
410433 while ( _interpBuffers . Count > maxBuffers )
0 commit comments