Skip to content

Commit 8c737fe

Browse files
committed
Improved NetworkedTransform to use targeted messages
1 parent c037fe9 commit 8c737fe

File tree

1 file changed

+32
-10
lines changed

1 file changed

+32
-10
lines changed

MLAPI/MonoBehaviours/Prototyping/NetworkedTransform.cs

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)