Improved NetworkedTransform to use targeted messages

This commit is contained in:
Albin Corén 2018-01-10 08:42:22 +01:00
parent c037fe96de
commit 8c737febca

View File

@ -27,7 +27,10 @@ namespace MLAP
private Quaternion lerpStartRot; private Quaternion lerpStartRot;
private Vector3 lerpEndPos; private Vector3 lerpEndPos;
private Quaternion lerpEndRot; private Quaternion lerpEndRot;
private float lastSendTime; private float lastSendTime;
private Vector3 lastSentPos;
private Quaternion lastSentRot;
private void OnValidate() private void OnValidate()
{ {
@ -35,10 +38,14 @@ namespace MLAP
InterpolatePosition = false; InterpolatePosition = false;
if (InterpolateServer && !InterpolatePosition) if (InterpolateServer && !InterpolatePosition)
InterpolateServer = false; InterpolateServer = false;
if (MinDegrees < 0)
MinDegrees = 0;
if (MinMeters < 0)
MinMeters = 0;
} }
void Awake() void Start()
{ {
if (isServer) if (isServer)
{ {
@ -58,16 +65,35 @@ namespace MLAP
{ {
if(isLocalPlayer) if(isLocalPlayer)
{ {
if(Time.time - lastSendTime >= timeForLerp) if(Time.time - lastSendTime >= timeForLerp && (Vector3.Distance(transform.position, lastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, lastSentRot) > MinDegrees))
{ {
lastSendTime = Time.time; lastSendTime = Time.time;
lastSentPos = transform.position;
lastSentRot = transform.rotation;
using (MemoryStream writeStream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(writeStream))
{
writer.Write(transform.position.x);
writer.Write(transform.position.y);
writer.Write(transform.position.z);
writer.Write(transform.rotation.x);
writer.Write(transform.rotation.y);
writer.Write(transform.rotation.z);
}
SendToServerTarget("MLAPI_OnRecieveTransformFromClient", "MLAPI_POSITION_UPDATE", writeStream.ToArray());
}
} }
} }
else else
{ {
lerpT += Time.deltaTime / timeForLerp; if((isServer && InterpolateServer) || !isServer)
transform.position = Vector3.Lerp(lerpStartPos, lerpEndPos, lerpT); {
transform.rotation = Quaternion.Slerp(lerpStartRot, lerpEndRot, lerpT); lerpT += Time.deltaTime / timeForLerp;
transform.position = Vector3.Lerp(lerpStartPos, lerpEndPos, lerpT);
transform.rotation = Quaternion.Slerp(lerpStartRot, lerpEndRot, lerpT);
}
} }
} }
@ -79,9 +105,6 @@ namespace MLAP
{ {
using (BinaryReader reader = new BinaryReader(stream)) using (BinaryReader reader = new BinaryReader(stream))
{ {
uint netId = reader.ReadUInt32();
if (networkId != netId)
return;
float xPos = reader.ReadSingle(); float xPos = reader.ReadSingle();
float yPos = reader.ReadSingle(); float yPos = reader.ReadSingle();
float zPos = reader.ReadSingle(); float zPos = reader.ReadSingle();
@ -126,7 +149,6 @@ namespace MLAP
{ {
using(BinaryWriter writer = new BinaryWriter(writeStream)) using(BinaryWriter writer = new BinaryWriter(writeStream))
{ {
writer.Write(networkId);
writer.Write(xPos); writer.Write(xPos);
writer.Write(yPos); writer.Write(yPos);
writer.Write(zPos); writer.Write(zPos);
@ -134,7 +156,7 @@ namespace MLAP
writer.Write(yRot); writer.Write(yRot);
writer.Write(zRot); writer.Write(zRot);
} }
SendToNonLocalClients("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.ToArray()); SendToNonLocalClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.ToArray());
} }
} }
} }