@@ -27,18 +27,25 @@ public class NetworkedTransform : NetworkedBehaviour
2727 private Quaternion lerpStartRot ;
2828 private Vector3 lerpEndPos ;
2929 private Quaternion lerpEndRot ;
30+
3031 private float lastSendTime ;
32+ private Vector3 lastSentPos ;
33+ private Quaternion lastSentRot ;
3134
3235 private void OnValidate ( )
3336 {
3437 if ( ! AssumeSyncedSends && InterpolatePosition )
3538 InterpolatePosition = false ;
3639 if ( InterpolateServer && ! InterpolatePosition )
3740 InterpolateServer = false ;
41+ if ( MinDegrees < 0 )
42+ MinDegrees = 0 ;
43+ if ( MinMeters < 0 )
44+ MinMeters = 0 ;
3845 }
3946
4047
41- void Awake ( )
48+ void Start ( )
4249 {
4350 if ( isServer )
4451 {
@@ -58,16 +65,35 @@ void Update()
5865 {
5966 if ( isLocalPlayer )
6067 {
61- if ( Time . time - lastSendTime >= timeForLerp )
68+ if ( Time . time - lastSendTime >= timeForLerp && ( Vector3 . Distance ( transform . position , lastSentPos ) > MinMeters || Quaternion . Angle ( transform . rotation , lastSentRot ) > MinDegrees ) )
6269 {
6370 lastSendTime = Time . time ;
71+ lastSentPos = transform . position ;
72+ lastSentRot = transform . rotation ;
73+ using ( MemoryStream writeStream = new MemoryStream ( ) )
74+ {
75+ using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
76+ {
77+ writer . Write ( transform . position . x ) ;
78+ writer . Write ( transform . position . y ) ;
79+ writer . Write ( transform . position . z ) ;
80+ writer . Write ( transform . rotation . x ) ;
81+ writer . Write ( transform . rotation . y ) ;
82+ writer . Write ( transform . rotation . z ) ;
83+ }
84+ SendToServerTarget ( "MLAPI_OnRecieveTransformFromClient" , "MLAPI_POSITION_UPDATE" , writeStream . ToArray ( ) ) ;
85+ }
86+
6487 }
6588 }
6689 else
6790 {
68- lerpT += Time . deltaTime / timeForLerp ;
69- transform . position = Vector3 . Lerp ( lerpStartPos , lerpEndPos , lerpT ) ;
70- transform . rotation = Quaternion . Slerp ( lerpStartRot , lerpEndRot , lerpT ) ;
91+ if ( ( isServer && InterpolateServer ) || ! isServer )
92+ {
93+ lerpT += Time . deltaTime / timeForLerp ;
94+ transform . position = Vector3 . Lerp ( lerpStartPos , lerpEndPos , lerpT ) ;
95+ transform . rotation = Quaternion . Slerp ( lerpStartRot , lerpEndRot , lerpT ) ;
96+ }
7197 }
7298 }
7399
@@ -79,9 +105,6 @@ private void OnRecieveTransformFromServer(int clientId, byte[] data)
79105 {
80106 using ( BinaryReader reader = new BinaryReader ( stream ) )
81107 {
82- uint netId = reader . ReadUInt32 ( ) ;
83- if ( networkId != netId )
84- return ;
85108 float xPos = reader . ReadSingle ( ) ;
86109 float yPos = reader . ReadSingle ( ) ;
87110 float zPos = reader . ReadSingle ( ) ;
@@ -126,15 +149,14 @@ private void OnRecieveTransformFromClient(int clientId, byte[] data)
126149 {
127150 using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
128151 {
129- writer . Write ( networkId ) ;
130152 writer . Write ( xPos ) ;
131153 writer . Write ( yPos ) ;
132154 writer . Write ( zPos ) ;
133155 writer . Write ( xRot ) ;
134156 writer . Write ( yRot ) ;
135157 writer . Write ( zRot ) ;
136158 }
137- SendToNonLocalClients ( "MLAPI_OnRecieveTransformFromServer" , "MLAPI_POSITION_UPDATE" , writeStream . ToArray ( ) ) ;
159+ SendToNonLocalClientsTarget ( "MLAPI_OnRecieveTransformFromServer" , "MLAPI_POSITION_UPDATE" , writeStream . ToArray ( ) ) ;
138160 }
139161 }
140162 }
0 commit comments