From 69d0f1bc8036c27e46a6731113c7d11bdfbee5bc Mon Sep 17 00:00:00 2001 From: Anton Franzluebbers Date: Wed, 13 Sep 2023 16:54:43 -0400 Subject: [PATCH] initial offline mode, added reference docs for message types --- Runtime/Util/BinaryWriterExtensions.cs | 2 +- Runtime/VelNetManager.cs | 412 +++++++++++------- Runtime/VelNetPlayer.cs | 6 +- .../BasicExample/Scenes/BasicExample.unity | 27 +- .../DissonanceExample/Scenes/Demo All.unity | 27 +- .../Scenes/Simple Connection Example.unity | 29 +- Samples/FullExample/Scenes/FullExample.unity | 16 +- .../Scenes/VelVoiceExample.unity | 27 +- package.json | 2 +- 9 files changed, 358 insertions(+), 190 deletions(-) diff --git a/Runtime/Util/BinaryWriterExtensions.cs b/Runtime/Util/BinaryWriterExtensions.cs index 45ef835..56389b1 100644 --- a/Runtime/Util/BinaryWriterExtensions.cs +++ b/Runtime/Util/BinaryWriterExtensions.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace VelNet { - public static class BinaryWriterExtensions + public static partial class BinaryWriterExtensions { #region Writers diff --git a/Runtime/VelNetManager.cs b/Runtime/VelNetManager.cs index 57dd72d..a758270 100644 --- a/Runtime/VelNetManager.cs +++ b/Runtime/VelNetManager.cs @@ -8,6 +8,7 @@ using UnityEngine; using System.Net; using UnityEngine.SceneManagement; using System.IO; +using System.Threading.Tasks; namespace VelNet { @@ -119,6 +120,8 @@ namespace VelNet public bool connected; private bool wasConnected; private double lastConnectionCheck; + private bool offlineMode; + private string offlineRoomName; public List prefabs = new List(); public NetworkObject[] sceneObjects; @@ -316,7 +319,8 @@ namespace VelNet onlyConnectToSameVersion ? $"{Application.productName}_{Application.version}" : $"{Application.productName}", - Hash128.Compute(SystemInfo.deviceUniqueIdentifier).ToString() + Hash128.Compute(SystemInfo.deviceUniqueIdentifier + Application.productName) + .ToString() ); } @@ -742,137 +746,7 @@ namespace VelNet AddMessage(new ConnectedMessage()); while (socketConnection.Connected) { - //read a byte - int b = stream.ReadByte(); - MessageReceivedType type = (MessageReceivedType)b; - - switch (type) - { - //login - case MessageReceivedType.LOGGED_IN: - { - AddMessage(new LoginMessage - { - // not really the sender... - userId = GetIntFromBytes(ReadExact(stream, 4)) - }); - break; - } - //rooms - case MessageReceivedType.ROOM_LIST: - { - RoomsMessage m = new RoomsMessage(); - m.rooms = new List(); - int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload - byte[] utf8data = ReadExact(stream, N); - string roomMessage = Encoding.UTF8.GetString(utf8data); - - - string[] sections = roomMessage.Split(','); - foreach (string s in sections) - { - string[] pieces = s.Split(':'); - if (pieces.Length == 2) - { - m.rooms.Add(new ListedRoom - { - name = pieces[0], - numUsers = int.Parse(pieces[1]) - }); - } - } - - AddMessage(m); - break; - } - case MessageReceivedType.ROOM_DATA: - { - RoomDataMessage rdm = new RoomDataMessage(); - int N = stream.ReadByte(); - byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 - string roomname = Encoding.UTF8.GetString(utf8data); - - N = GetIntFromBytes(ReadExact(stream, 4)); //the number of client datas to read - rdm.room = roomname; - for (int i = 0; i < N; i++) - { - // client id + short string - int client_id = GetIntFromBytes(ReadExact(stream, 4)); - int s = stream.ReadByte(); //size of string - utf8data = ReadExact(stream, s); //the username - string username = Encoding.UTF8.GetString(utf8data); - rdm.members.Add((client_id, username)); - } - - AddMessage(rdm); - break; - } - //joined - case MessageReceivedType.PLAYER_JOINED: - { - JoinMessage m = new JoinMessage(); - m.userId = GetIntFromBytes(ReadExact(stream, 4)); - int N = stream.ReadByte(); - byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 - m.room = Encoding.UTF8.GetString(utf8data); - AddMessage(m); - break; - } - //data - case MessageReceivedType.DATA_MESSAGE: - { - DataMessage m = new DataMessage(); - m.senderId = GetIntFromBytes(ReadExact(stream, 4)); - int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload - m.data = ReadExact(stream, N); //the message - AddMessage(m); - break; - } - // new master - case MessageReceivedType.MASTER_MESSAGE: - { - ChangeMasterMessage m = new ChangeMasterMessage(); - m.masterId = GetIntFromBytes(ReadExact(stream, 4)); // sender is the new master - AddMessage(m); - break; - } - - case MessageReceivedType.YOU_JOINED: - { - YouJoinedMessage m = new YouJoinedMessage(); - int N = GetIntFromBytes(ReadExact(stream, 4)); - m.playerIds = new List(); - for (int i = 0; i < N; i++) - { - m.playerIds.Add(GetIntFromBytes(ReadExact(stream, 4))); - } - - N = stream.ReadByte(); - byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 - m.room = Encoding.UTF8.GetString(utf8data); - AddMessage(m); - break; - } - case MessageReceivedType.PLAYER_LEFT: - { - PlayerLeftMessage m = new PlayerLeftMessage(); - m.userId = GetIntFromBytes(ReadExact(stream, 4)); - int N = stream.ReadByte(); - byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 - m.room = Encoding.UTF8.GetString(utf8data); - AddMessage(m); - break; - } - case MessageReceivedType.YOU_LEFT: - { - YouLeftMessage m = new YouLeftMessage(); - int N = stream.ReadByte(); - byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 - m.room = Encoding.UTF8.GetString(utf8data); - AddMessage(m); - break; - } - } + HandleIncomingMessage(reader); } } catch (ThreadAbortException) @@ -882,6 +756,9 @@ namespace VelNet catch (SocketException socketException) { VelNetLogger.Error("Socket exception: " + socketException); + VelNetLogger.Error("Switching to offline mode"); + offlineMode = true; + AddMessage(new ConnectedMessage()); } catch (Exception ex) { @@ -891,8 +768,145 @@ namespace VelNet connected = false; } + private void HandleIncomingMessage(BinaryReader reader) + { + MessageReceivedType type = (MessageReceivedType)reader.ReadByte(); + Debug.Log(type); + switch (type) + { + //login + case MessageReceivedType.LOGGED_IN: + { + AddMessage(new LoginMessage + { + // not really the sender... + userId = GetIntFromBytes(reader.ReadBytes(4)) + }); + break; + } + //rooms + case MessageReceivedType.ROOM_LIST: + { + RoomsMessage m = new RoomsMessage(); + m.rooms = new List(); + int N = GetIntFromBytes(reader.ReadBytes(4)); //the size of the payload + byte[] utf8data = reader.ReadBytes(N); + string roomMessage = Encoding.UTF8.GetString(utf8data); + + string[] sections = roomMessage.Split(','); + foreach (string s in sections) + { + string[] pieces = s.Split(':'); + if (pieces.Length == 2) + { + m.rooms.Add(new ListedRoom + { + name = pieces[0], + numUsers = int.Parse(pieces[1]) + }); + } + } + + AddMessage(m); + break; + } + case MessageReceivedType.ROOM_DATA: + { + RoomDataMessage rdm = new RoomDataMessage(); + int N = reader.ReadByte(); + byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + string roomname = Encoding.UTF8.GetString(utf8data); + + N = GetIntFromBytes(reader.ReadBytes(4)); //the number of client datas to read + rdm.room = roomname; + for (int i = 0; i < N; i++) + { + // client id + short string + int clientId = GetIntFromBytes(reader.ReadBytes(4)); + int s = reader.ReadByte(); //size of string + utf8data = reader.ReadBytes(s); //the username + string username = Encoding.UTF8.GetString(utf8data); + rdm.members.Add((clientId, username)); + } + + AddMessage(rdm); + break; + } + //joined + case MessageReceivedType.PLAYER_JOINED: + { + JoinMessage m = new JoinMessage(); + m.userId = GetIntFromBytes(reader.ReadBytes(4)); + int N = reader.ReadByte(); + byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + m.room = Encoding.UTF8.GetString(utf8data); + AddMessage(m); + break; + } + //data + case MessageReceivedType.DATA_MESSAGE: + { + DataMessage m = new DataMessage(); + m.senderId = GetIntFromBytes(reader.ReadBytes(4)); + int N = GetIntFromBytes(reader.ReadBytes(4)); //the size of the payload + m.data = reader.ReadBytes(N); //the message + AddMessage(m); + break; + } + // new master + case MessageReceivedType.MASTER_MESSAGE: + { + ChangeMasterMessage m = new ChangeMasterMessage(); + m.masterId = GetIntFromBytes(reader.ReadBytes(4)); // sender is the new master + AddMessage(m); + break; + } + + case MessageReceivedType.YOU_JOINED: + { + YouJoinedMessage m = new YouJoinedMessage(); + int N = GetIntFromBytes(reader.ReadBytes(4)); + m.playerIds = new List(); + for (int i = 0; i < N; i++) + { + m.playerIds.Add(GetIntFromBytes(reader.ReadBytes(4))); + } + + N = reader.ReadByte(); + byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + m.room = Encoding.UTF8.GetString(utf8data); + AddMessage(m); + break; + } + case MessageReceivedType.PLAYER_LEFT: + { + PlayerLeftMessage m = new PlayerLeftMessage(); + m.userId = GetIntFromBytes(reader.ReadBytes(4)); + int N = reader.ReadByte(); + byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + m.room = Encoding.UTF8.GetString(utf8data); + AddMessage(m); + break; + } + case MessageReceivedType.YOU_LEFT: + { + YouLeftMessage m = new YouLeftMessage(); + int N = reader.ReadByte(); + byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + m.room = Encoding.UTF8.GetString(utf8data); + AddMessage(m); + break; + } + default: + VelNetLogger.Error("Unknown message type"); + throw new ArgumentOutOfRangeException(nameof(type), type, null); + } + } + private void ListenForDataUDP() { + if (offlineMode) return; + //I don't yet have a UDP connection try { @@ -900,17 +914,14 @@ namespace VelNet Debug.Assert(addresses.Length > 0); RemoteEndPoint = new IPEndPoint(addresses[0], port); - - udpSocket = new Socket(AddressFamily.InterNetwork, - SocketType.Dgram, ProtocolType.Udp); - + udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); udpConnected = false; byte[] buffer = new byte[1024]; while (true) { buffer[0] = 0; - Array.Copy(get_be_bytes(userid), 0, buffer, 1, 4); + Array.Copy(GetBigEndianBytes(userid), 0, buffer, 1, 4); udpSocket.SendTo(buffer, 5, SocketFlags.None, RemoteEndPoint); if (udpSocket.Available == 0) @@ -981,6 +992,12 @@ namespace VelNet /// True if the message successfully sent. False if it failed and we should quit private static bool SendTcpMessage(byte[] message) { + if (instance.offlineMode) + { + instance.FakeServer(message); + return true; + } + // Logging.Info("Sent: " + clientMessage); if (instance.socketConnection == null) { @@ -1019,7 +1036,7 @@ namespace VelNet return true; } - private static byte[] get_be_bytes(int n) + private static byte[] GetBigEndianBytes(int n) { return BitConverter.GetBytes(n).Reverse().ToArray(); } @@ -1104,10 +1121,10 @@ namespace VelNet MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); - byte[] R = Encoding.UTF8.GetBytes(roomName); + byte[] roomBytes = Encoding.UTF8.GetBytes(roomName); writer.Write((byte)MessageSendType.MESSAGE_JOINROOM); - writer.Write((byte)R.Length); - writer.Write(R); + writer.Write((byte)roomBytes.Length); + writer.Write(roomBytes); SendTcpMessage(stream.ToArray()); } @@ -1168,7 +1185,7 @@ namespace VelNet MemoryStream mem = new MemoryStream(); BinaryWriter writer = new BinaryWriter(mem); writer.Write(sendType); - writer.Write(get_be_bytes(message.Length)); + writer.WriteBigEndian(message.Length); writer.Write(message); return SendTcpMessage(mem.ToArray()); } @@ -1176,7 +1193,7 @@ namespace VelNet { //udp message needs the type toSend[0] = sendType; //we don't - Array.Copy(get_be_bytes(instance.userid), 0, toSend, 1, 4); + Array.Copy(GetBigEndianBytes(instance.userid), 0, toSend, 1, 4); Array.Copy(message, 0, toSend, 5, message.Length); SendUdpMessage(toSend, message.Length + 5); //shouldn't be over 1024... return true; @@ -1192,7 +1209,7 @@ namespace VelNet MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write((byte)MessageSendType.MESSAGE_GROUP); - writer.Write(get_be_bytes(message.Length)); + writer.WriteBigEndian(message.Length); writer.Write(message); writer.Write((byte)utf8bytes.Length); writer.Write(utf8bytes); @@ -1201,7 +1218,7 @@ namespace VelNet else { toSend[0] = (byte)MessageSendType.MESSAGE_GROUP; - Array.Copy(get_be_bytes(instance.userid), 0, toSend, 1, 4); + Array.Copy(GetBigEndianBytes(instance.userid), 0, toSend, 1, 4); //also need to send the group toSend[5] = (byte)utf8bytes.Length; Array.Copy(utf8bytes, 0, toSend, 6, utf8bytes.Length); @@ -1223,14 +1240,14 @@ namespace VelNet MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); - byte[] R = Encoding.UTF8.GetBytes(groupName); + byte[] groupNameBytes = Encoding.UTF8.GetBytes(groupName); writer.Write((byte)6); - writer.Write((byte)R.Length); - writer.Write(R); - writer.Write(get_be_bytes(clientIds.Count * 4)); + writer.Write((byte)groupNameBytes.Length); + writer.Write(groupNameBytes); + writer.WriteBigEndian(clientIds.Count * 4); foreach (int c in clientIds) { - writer.Write(get_be_bytes(c)); + writer.WriteBigEndian(c); } SendTcpMessage(stream.ToArray()); @@ -1490,5 +1507,100 @@ namespace VelNet return true; } + + /// + /// Pretends to be the server and sends back the result to be handled. Only should be called in offline mode. + /// + /// The message that was meant to be sent to the server. + private void FakeServer(byte[] message) + { + MemoryStream mem = new MemoryStream(message); + BinaryReader reader = new BinaryReader(mem); + MessageSendType messageType = (MessageSendType)reader.ReadByte(); + + MemoryStream outMem = new MemoryStream(); + BinaryWriter outWriter = new BinaryWriter(outMem); + + switch (messageType) + { + case MessageSendType.MESSAGE_OTHERS_ORDERED: + break; + case MessageSendType.MESSAGE_ALL_ORDERED: + break; + case MessageSendType.MESSAGE_LOGIN: + outWriter.Write((byte)MessageReceivedType.LOGGED_IN); + outWriter.WriteBigEndian(0); + break; + case MessageSendType.MESSAGE_GETROOMS: + outWriter.Write((byte)MessageReceivedType.ROOM_LIST); + outWriter.WriteBigEndian(0); + break; + case MessageSendType.MESSAGE_JOINROOM: + { + string roomName = Encoding.UTF8.GetString(reader.ReadBytes(reader.ReadByte())); + + // if leaving a room + if (string.IsNullOrEmpty(roomName)) + { + outWriter.Write((byte)MessageReceivedType.YOU_LEFT); + byte[] roomNameBytes = Encoding.UTF8.GetBytes(offlineRoomName); + outWriter.Write((byte)roomNameBytes.Length); + outWriter.Write(roomNameBytes); + } + else + { + outWriter.Write((byte)MessageReceivedType.YOU_JOINED); + outWriter.WriteBigEndian(1); // num players + outWriter.WriteBigEndian(0); // our userid + byte[] roomNameBytes = Encoding.UTF8.GetBytes(roomName); + outWriter.Write((byte)roomNameBytes.Length); + outWriter.Write(roomNameBytes); + } + + offlineRoomName = roomName; + break; + } + case MessageSendType.MESSAGE_OTHERS: + break; + case MessageSendType.MESSAGE_ALL: + break; + case MessageSendType.MESSAGE_GROUP: + break; + case MessageSendType.MESSAGE_SETGROUP: + break; + case MessageSendType.MESSAGE_GETROOMDATA: + { + outWriter.Write((byte)MessageReceivedType.ROOM_DATA); + byte[] roomNameBytes = Encoding.UTF8.GetBytes("OFFLINE"); + outWriter.Write((byte)roomNameBytes.Length); + outWriter.Write(roomNameBytes); + outWriter.WriteBigEndian(0); + break; + } + default: + throw new ArgumentOutOfRangeException(); + } + + outMem.Position = 0; + // if we run this in the same thread, then it is modifying the messages collection while iterating + Task.Run(() => { HandleIncomingMessage(new BinaryReader(outMem)); }); + } + } + + public static partial class BinaryWriterExtensions + { + public static void WriteBigEndian(this BinaryWriter writer, int value) + { + byte[] data = BitConverter.GetBytes(value); + Array.Reverse(data); + writer.Write(data); + } + + public static int ReadBigEndian(this BinaryReader reader) + { + byte[] data = reader.ReadBytes(4); + Array.Reverse(data); + return BitConverter.ToInt32(data, 0); + } } } \ No newline at end of file diff --git a/Runtime/VelNetPlayer.cs b/Runtime/VelNetPlayer.cs index de993a8..2fd2530 100644 --- a/Runtime/VelNetPlayer.cs +++ b/Runtime/VelNetPlayer.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System; using System.IO; +using System.Text; using UnityEngine; namespace VelNet @@ -82,12 +83,11 @@ namespace VelNet /// /// The length of the byte[] for message is fixed according to the message type /// - public void HandleMessage(VelNetManager.DataMessage m, bool unknown_sender = false) + public void HandleMessage(VelNetManager.DataMessage m, bool unknownSender = false) { using MemoryStream mem = new MemoryStream(m.data); using BinaryReader reader = new BinaryReader(mem); - //individual message parameters separated by comma VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte(); if (messageType == VelNetManager.MessageType.Custom) @@ -109,7 +109,7 @@ namespace VelNet return; } - if (unknown_sender) + if (unknownSender) { VelNetLogger.Error("Received non-custom message from player that doesn't exist "); return; diff --git a/Samples/BasicExample/Scenes/BasicExample.unity b/Samples/BasicExample/Scenes/BasicExample.unity index eb3602f..50cf8f9 100644 --- a/Samples/BasicExample/Scenes/BasicExample.unity +++ b/Samples/BasicExample/Scenes/BasicExample.unity @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -199,7 +199,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -337,6 +339,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -372,7 +375,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &652307109 GameObject: @@ -466,7 +469,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037} --- !u!1 &903768653 GameObject: @@ -500,9 +503,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -542,7 +553,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!81 &903768658 AudioListener: @@ -583,7 +594,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1099803616 MonoBehaviour: @@ -597,7 +608,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3} m_Name: m_EditorClassIdentifier: - host: vn.ugavel.com + host: velnet-demo.ugavel.com port: 5000 udpConnected: 0 userid: -1 diff --git a/Samples/DissonanceExample/Scenes/Demo All.unity b/Samples/DissonanceExample/Scenes/Demo All.unity index a816e45..88f3398 100644 --- a/Samples/DissonanceExample/Scenes/Demo All.unity +++ b/Samples/DissonanceExample/Scenes/Demo All.unity @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -585,7 +585,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -749,6 +751,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -1733,9 +1736,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -2055,7 +2066,7 @@ MonoBehaviour: prefabName: isSceneObject: 1 syncedComponents: - - {fileID: 948755939} + - {fileID: 0} --- !u!114 &948755941 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2518,7 +2529,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3} m_Name: m_EditorClassIdentifier: - host: vn.ugavel.com + host: velnet-demo.ugavel.com port: 5000 udpConnected: 0 userid: -1 @@ -4106,7 +4117,7 @@ MonoBehaviour: prefabName: isSceneObject: 1 syncedComponents: - - {fileID: 2021764945} + - {fileID: 0} --- !u!114 &2021764945 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4372,6 +4383,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3951900052977689805, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3} @@ -4439,4 +4451,7 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3} diff --git a/Samples/DissonanceExample/Scenes/Simple Connection Example.unity b/Samples/DissonanceExample/Scenes/Simple Connection Example.unity index 0e75daa..d5f9ace 100644 --- a/Samples/DissonanceExample/Scenes/Simple Connection Example.unity +++ b/Samples/DissonanceExample/Scenes/Simple Connection Example.unity @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -152,7 +152,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3} m_Name: m_EditorClassIdentifier: - host: vn.ugavel.com + host: velnet-demo.ugavel.com port: 5000 udpConnected: 0 userid: -1 @@ -301,9 +301,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 958953873} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &958953875 @@ -386,6 +394,9 @@ MonoBehaviour: networkObject: {fileID: 958953879} serializationRateHz: 30 hybridOnChangeCompression: 1 + position: 1 + rotation: 1 + scale: 0 useLocalTransform: 0 teleportDistance: 0 teleportAngle: 0 @@ -448,9 +459,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 diff --git a/Samples/FullExample/Scenes/FullExample.unity b/Samples/FullExample/Scenes/FullExample.unity index 25ba695..349946d 100644 --- a/Samples/FullExample/Scenes/FullExample.unity +++ b/Samples/FullExample/Scenes/FullExample.unity @@ -616,7 +616,7 @@ RectTransform: - {fileID: 1020014860} - {fileID: 1536292193} m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -788,7 +788,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &498776799 GameObject: @@ -1319,7 +1319,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &711524766 GameObject: @@ -1779,7 +1779,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!81 &903768658 AudioListener: @@ -2237,7 +2237,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1020014859 GameObject: @@ -2585,7 +2585,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1099803616 MonoBehaviour: @@ -2599,7 +2599,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3} m_Name: m_EditorClassIdentifier: - host: velnet-demo.ugavel.com + host: velnet-demo2.ugavel.com port: 5000 udpConnected: 0 userid: -1 @@ -3251,7 +3251,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1536292192 GameObject: diff --git a/Samples/VelVoiceExample/Scenes/VelVoiceExample.unity b/Samples/VelVoiceExample/Scenes/VelVoiceExample.unity index eb1d9ef..d405d29 100644 --- a/Samples/VelVoiceExample/Scenes/VelVoiceExample.unity +++ b/Samples/VelVoiceExample/Scenes/VelVoiceExample.unity @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -280,7 +280,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -517,6 +519,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -552,7 +555,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &513088493 GameObject: @@ -722,7 +725,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037} --- !u!1 &686695937 GameObject: @@ -987,9 +990,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1029,7 +1040,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!81 &903768658 AudioListener: @@ -1305,7 +1316,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1099803616 MonoBehaviour: @@ -1319,7 +1330,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3} m_Name: m_EditorClassIdentifier: - host: vn.ugavel.com + host: velnet-demo.ugavel.com port: 5000 udpConnected: 0 userid: -1 diff --git a/package.json b/package.json index 8fd0fb7..cffda62 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edu.uga.engr.vel.velnet", "displayName": "VelNet", - "version": "1.2.3", + "version": "1.3.0", "unity": "2019.1", "description": "A custom networking library for Unity.", "keywords": [