Newer
Older
Simple-Multiplayer-Unity3D / Assets / Scripts / PlayerData.cs
using System;
using System.IO;
using UnityEngine;
using Multiplayer.Network;

[Serializable]
public struct PlayerData : INetworkSerializable
{
    public ushort playerId;
    public string username;
    public Vector3 position;
    public Quaternion rotation;

    public PlayerData(string username, Vector3 position, Quaternion rotation)
    {
        playerId = 0; // assigned by server
        this.username = username;
        this.position = position;
        this.rotation = rotation;
    }

    public void Serialize(BinaryWriter writer)
    {
        writer.Write(playerId);
        writer.Write(username ?? "");

        //Position
        writer.Write(position.x);
        writer.Write(position.y);
        writer.Write(position.z);

        //Rotation
        byte yaw = (byte)(rotation.eulerAngles.y / 360f * 255f);
        writer.Write(yaw);
    }

    public void Deserialize(BinaryReader reader)
    {
        playerId = reader.ReadUInt16();
        username = reader.ReadString();
        position = new Vector3(
            reader.ReadSingle(),
            reader.ReadSingle(),
            reader.ReadSingle()
        );
        byte yaw = reader.ReadByte();
        rotation = Quaternion.Euler(0, yaw / 255f * 360f, 0);
    }
}