55 lines
2.1 KiB
C#
55 lines
2.1 KiB
C#
// this struct exists only for OnDe/Serialize performance.
|
|
// instead of WriteVector3+Quaternion+Vector3+Vector3,
|
|
// we read & write the whole struct as blittable once.
|
|
//
|
|
// struct packing can cause odd results with blittable on different platforms,
|
|
// so this is usually not recommended!
|
|
//
|
|
// in this case however, we need to squeeze everything we can out of prediction
|
|
// to support low even devices / VR.
|
|
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
namespace Mirror
|
|
{
|
|
// struct packing
|
|
|
|
[StructLayout(LayoutKind.Sequential)] // explicitly force sequential
|
|
public struct PredictedSyncData
|
|
{
|
|
public float deltaTime; // 4 bytes (word aligned)
|
|
public Vector3 position; // 12 bytes (word aligned)
|
|
public Quaternion rotation; // 16 bytes (word aligned)
|
|
public Vector3 velocity; // 12 bytes (word aligned)
|
|
public Vector3 angularVelocity; // 12 bytes (word aligned)
|
|
// DO NOT SYNC SLEEPING! this cuts benchmark performance in half(!!!)
|
|
// public byte sleeping; // 1 byte: bool isn't blittable
|
|
|
|
// constructor for convenience
|
|
public PredictedSyncData(float deltaTime, Vector3 position, Quaternion rotation, Vector3 velocity, Vector3 angularVelocity)//, bool sleeping)
|
|
{
|
|
this.deltaTime = deltaTime;
|
|
this.position = position;
|
|
this.rotation = rotation;
|
|
this.velocity = velocity;
|
|
this.angularVelocity = angularVelocity;
|
|
// DO NOT SYNC SLEEPING! this cuts benchmark performance in half(!!!)
|
|
// this.sleeping = sleeping ? (byte)1 : (byte)0;
|
|
}
|
|
}
|
|
|
|
// NetworkReader/Writer extensions to write this struct
|
|
public static class PredictedSyncDataReadWrite
|
|
{
|
|
public static void WritePredictedSyncData(this NetworkWriter writer, PredictedSyncData data)
|
|
{
|
|
writer.WriteBlittable(data);
|
|
}
|
|
|
|
public static PredictedSyncData ReadPredictedSyncData(this NetworkReader reader)
|
|
{
|
|
return reader.ReadBlittable<PredictedSyncData>();
|
|
}
|
|
}
|
|
}
|