@@ -27,18 +27,25 @@ public class NetworkedTransform : NetworkedBehaviour
27
27
private Quaternion lerpStartRot ;
28
28
private Vector3 lerpEndPos ;
29
29
private Quaternion lerpEndRot ;
30
+
30
31
private float lastSendTime ;
32
+ private Vector3 lastSentPos ;
33
+ private Quaternion lastSentRot ;
31
34
32
35
private void OnValidate ( )
33
36
{
34
37
if ( ! AssumeSyncedSends && InterpolatePosition )
35
38
InterpolatePosition = false ;
36
39
if ( InterpolateServer && ! InterpolatePosition )
37
40
InterpolateServer = false ;
41
+ if ( MinDegrees < 0 )
42
+ MinDegrees = 0 ;
43
+ if ( MinMeters < 0 )
44
+ MinMeters = 0 ;
38
45
}
39
46
40
47
41
- void Awake ( )
48
+ void Start ( )
42
49
{
43
50
if ( isServer )
44
51
{
@@ -58,16 +65,35 @@ void Update()
58
65
{
59
66
if ( isLocalPlayer )
60
67
{
61
- if ( Time . time - lastSendTime >= timeForLerp )
68
+ if ( Time . time - lastSendTime >= timeForLerp && ( Vector3 . Distance ( transform . position , lastSentPos ) > MinMeters || Quaternion . Angle ( transform . rotation , lastSentRot ) > MinDegrees ) )
62
69
{
63
70
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
+
64
87
}
65
88
}
66
89
else
67
90
{
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
+ }
71
97
}
72
98
}
73
99
@@ -79,9 +105,6 @@ private void OnRecieveTransformFromServer(int clientId, byte[] data)
79
105
{
80
106
using ( BinaryReader reader = new BinaryReader ( stream ) )
81
107
{
82
- uint netId = reader . ReadUInt32 ( ) ;
83
- if ( networkId != netId )
84
- return ;
85
108
float xPos = reader . ReadSingle ( ) ;
86
109
float yPos = reader . ReadSingle ( ) ;
87
110
float zPos = reader . ReadSingle ( ) ;
@@ -126,15 +149,14 @@ private void OnRecieveTransformFromClient(int clientId, byte[] data)
126
149
{
127
150
using ( BinaryWriter writer = new BinaryWriter ( writeStream ) )
128
151
{
129
- writer . Write ( networkId ) ;
130
152
writer . Write ( xPos ) ;
131
153
writer . Write ( yPos ) ;
132
154
writer . Write ( zPos ) ;
133
155
writer . Write ( xRot ) ;
134
156
writer . Write ( yRot ) ;
135
157
writer . Write ( zRot ) ;
136
158
}
137
- SendToNonLocalClients ( "MLAPI_OnRecieveTransformFromServer" , "MLAPI_POSITION_UPDATE" , writeStream . ToArray ( ) ) ;
159
+ SendToNonLocalClientsTarget ( "MLAPI_OnRecieveTransformFromServer" , "MLAPI_POSITION_UPDATE" , writeStream . ToArray ( ) ) ;
138
160
}
139
161
}
140
162
}
0 commit comments