NetworkGuid.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using Unity.Netcode;
  3. //可用于同步的Guid值(客户端)
  4. public class NetworkGuid : INetworkSerializable
  5. {
  6. public ulong FirstHalf;
  7. public ulong SecondHalf;
  8. public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
  9. {
  10. serializer.SerializeValue(ref FirstHalf);
  11. serializer.SerializeValue(ref SecondHalf);
  12. }
  13. }
  14. public static class NetworkGuidExtensions
  15. {
  16. public static NetworkGuid ToNetworkGuid(this Guid id)
  17. {
  18. var networkId = new NetworkGuid();
  19. networkId.FirstHalf = BitConverter.ToUInt64(id.ToByteArray(), 0);
  20. networkId.SecondHalf = BitConverter.ToUInt64(id.ToByteArray(), 8);
  21. return networkId;
  22. }
  23. public static Guid ToGuid(this NetworkGuid networkId)
  24. {
  25. var bytes = new byte[16];
  26. Buffer.BlockCopy(BitConverter.GetBytes(networkId.FirstHalf), 0, bytes, 0, 8);
  27. Buffer.BlockCopy(BitConverter.GetBytes(networkId.SecondHalf), 0, bytes, 8, 8);
  28. return new Guid(bytes);
  29. }
  30. }