diff --git a/Runtime/NetworkObject.cs b/Runtime/NetworkObject.cs
index dfe1248..b784435 100644
--- a/Runtime/NetworkObject.cs
+++ b/Runtime/NetworkObject.cs
@@ -35,6 +35,7 @@ namespace VelNet
///
/// This may be empty if it's not a prefab (scene object)
///
+ [Tooltip("For spawnable prefab objects")]
public string prefabName;
public bool isSceneObject;
diff --git a/Runtime/Util/SyncRigidbody.cs b/Runtime/Util/SyncRigidbody.cs
index 43d849c..5937ff4 100644
--- a/Runtime/Util/SyncRigidbody.cs
+++ b/Runtime/Util/SyncRigidbody.cs
@@ -139,11 +139,5 @@ namespace VelNet
);
}
}
-
- [VelNetRPC]
- private void Test()
- {
-
- }
}
}
\ No newline at end of file
diff --git a/Runtime/Util/VelNetLogger.cs b/Runtime/Util/VelNetLogger.cs
new file mode 100644
index 0000000..ed0eb61
--- /dev/null
+++ b/Runtime/Util/VelNetLogger.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+
+namespace VelNet
+{
+ public static class VelNetLogger
+ {
+ public static void Info(string message, Object context = null)
+ {
+ if (VelNetManager.instance != null && VelNetManager.instance.debugMessages)
+ {
+ Debug.Log($"[VelNet] {message}", context);
+ }
+ }
+
+ public static void Error(string message, Object context = null)
+ {
+ Debug.LogError($"[VelNet] {message}", context);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Util/VelNetLogger.cs.meta b/Runtime/Util/VelNetLogger.cs.meta
new file mode 100644
index 0000000..323d2e6
--- /dev/null
+++ b/Runtime/Util/VelNetLogger.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 38bfd5f9fb924b7bb82a7a5e4fc09c1c
+timeCreated: 1658256074
\ No newline at end of file
diff --git a/Runtime/VelNetManager.cs b/Runtime/VelNetManager.cs
index c60b674..029db01 100644
--- a/Runtime/VelNetManager.cs
+++ b/Runtime/VelNetManager.cs
@@ -11,12 +11,11 @@ using System.IO;
namespace VelNet
{
-
/// Used to flag methods as remote-callable.
public class VelNetRPC : Attribute
{
}
-
+
[AddComponentMenu("VelNet/VelNet Manager")]
public class VelNetManager : MonoBehaviour
{
@@ -70,6 +69,15 @@ namespace VelNet
private Thread clientReceiveThreadUDP;
public int userid = -1;
+ [Tooltip("Sends debug messages about connection and join events")]
+ public bool debugMessages;
+
+ [Tooltip("Automatically logs in with app name and hash of device id after connecting")]
+ public bool autoLogin = true;
+
+ [Tooltip("Uses the version number in the login to prevent crosstalk between different app versions")]
+ public bool onlyConnectToSameVersion;
+
public readonly Dictionary players = new Dictionary();
#region Callbacks
@@ -88,8 +96,9 @@ namespace VelNet
///
/// Somebody else just joined our room
+ /// bool is true when this is a join message for someone that was already in the room when we joined it
///
- public static Action OnPlayerJoined;
+ public static Action OnPlayerJoined;
///
/// Somebody else just left our room
@@ -177,6 +186,11 @@ namespace VelNet
{
public string room;
public readonly List<(int, string)> members = new List<(int, string)>();
+
+ public override string ToString()
+ {
+ return room + "\n" + string.Join("\n", members.Select(m => $"{m.Item1}\t{m.Item2}"));
+ }
}
public class JoinMessage : Message
@@ -198,7 +212,7 @@ namespace VelNet
public class YouJoinedMessage : Message
{
- public List ids;
+ public List playerIds;
public string room;
}
@@ -217,27 +231,35 @@ namespace VelNet
{
}
- private int maxUnreadMessages = 1000;
- public readonly List receivedMessages = new List();
+ private const int maxUnreadMessages = 1000;
+ private readonly List receivedMessages = new List();
private void Awake()
{
- if (instance != null)
- {
- Debug.LogError("Multiple NetworkManagers detected! Bad!", this);
- }
-
- instance = this;
-
- SceneManager.sceneLoaded += (scene, mode) =>
+ SceneManager.sceneLoaded += (_, _) =>
{
// add all local network objects
sceneObjects = FindObjectsOfType().Where(o => o.isSceneObject).ToArray();
};
+ }
+ private void OnEnable()
+ {
+ if (instance != null)
+ {
+ VelNetLogger.Error("Multiple NetworkManagers detected! Bad!", this);
+ }
+
+ instance = this;
ConnectToServer();
}
+ private void OnDisable()
+ {
+ DisconnectFromServer();
+ instance = null;
+ }
+
private void AddMessage(Message m)
{
bool added = false;
@@ -257,7 +279,7 @@ namespace VelNet
}
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString());
}
}
@@ -272,6 +294,7 @@ namespace VelNet
{
case ConnectedMessage msg:
{
+ VelNetLogger.Info("Connected to server.");
try
{
OnConnectedToServer?.Invoke();
@@ -279,7 +302,15 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString());
+ }
+
+ if (autoLogin)
+ {
+ Login(
+ onlyConnectToSameVersion ? $"{Application.productName}_{Application.version}" : $"{Application.productName}",
+ Hash128.Compute(SystemInfo.deviceUniqueIdentifier).ToString()
+ );
}
break;
@@ -288,12 +319,11 @@ namespace VelNet
{
if (userid == lm.userId)
{
- Debug.Log("Received duplicate login message " + userid);
- return;
+ VelNetLogger.Error("Received duplicate login message " + userid);
}
userid = lm.userId;
- Debug.Log("Joined server " + userid);
+ VelNetLogger.Info("Logged in: " + userid);
try
{
@@ -302,7 +332,7 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
//start the udp thread
@@ -314,6 +344,7 @@ namespace VelNet
}
case RoomsMessage rm:
{
+ VelNetLogger.Info($"Received rooms:\n{rm}");
try
{
RoomsReceived?.Invoke(rm);
@@ -321,13 +352,14 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
break;
}
case RoomDataMessage rdm:
{
+ VelNetLogger.Info($"Received room data:\n{rdm}");
try
{
RoomDataReceived?.Invoke(rdm);
@@ -335,19 +367,21 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
break;
}
case YouJoinedMessage jm:
{
+ VelNetLogger.Info($"Joined Room: {jm.room} \t ({jm.playerIds.Count} players)");
+
// we clear the list, but will recreate as we get messages from people in our room
players.Clear();
masterPlayer = null;
- foreach (int playerId in jm.ids)
+ foreach (int playerId in jm.playerIds)
{
VelNetPlayer player = new VelNetPlayer
{
@@ -365,7 +399,7 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
foreach (KeyValuePair kvp in players)
@@ -374,12 +408,12 @@ namespace VelNet
{
try
{
- OnPlayerJoined?.Invoke(kvp.Value);
+ OnPlayerJoined?.Invoke(kvp.Value, true);
}
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
}
}
@@ -394,7 +428,10 @@ namespace VelNet
}
case PlayerLeftMessage lm:
{
+ VelNetLogger.Info($"Player left: {lm.userId}");
+
VelNetPlayer me = players[userid];
+
// we got a left message, kill it
// change ownership of all objects to master
List deleteObjects = new List();
@@ -433,13 +470,15 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
break;
}
case JoinMessage jm:
{
+ VelNetLogger.Info($"Player joined: {jm.userId}");
+
// we got a join message, create it
VelNetPlayer player = new VelNetPlayer
{
@@ -450,12 +489,12 @@ namespace VelNet
players.Add(jm.userId, player);
try
{
- OnPlayerJoined?.Invoke(player);
+ OnPlayerJoined?.Invoke(player, false);
}
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
@@ -469,13 +508,15 @@ namespace VelNet
}
else
{
- Debug.LogError("Received message from player that doesn't exist ");
+ VelNetLogger.Error("Received message from player that doesn't exist ");
}
break;
}
case ChangeMasterMessage cm:
{
+ VelNetLogger.Info($"Master client changed: {cm.masterId}");
+
if (masterPlayer == null)
{
if (players.ContainsKey(cm.masterId))
@@ -485,7 +526,7 @@ namespace VelNet
else
{
masterPlayer = players.Aggregate((p1, p2) => p1.Value.userid.CompareTo(p2.Value.userid) > 0 ? p1 : p2).Value;
- Debug.LogError("Got an invalid master client id from the server. Using fallback.");
+ VelNetLogger.Error("Got an invalid master client id from the server. Using fallback.");
}
// no master player yet, add the scene objects
@@ -494,23 +535,24 @@ namespace VelNet
{
if (sceneObjects[i].sceneNetworkId == 0)
{
- Debug.LogError("Scene Network ID is 0. Make sure to assign one first.", sceneObjects[i]);
+ VelNetLogger.Error("Scene Network ID is 0. Make sure to assign one first.", sceneObjects[i]);
}
sceneObjects[i].networkId = -1 + "-" + sceneObjects[i].sceneNetworkId;
sceneObjects[i].owner = masterPlayer;
sceneObjects[i].isSceneObject = true; // needed for special handling when deleted
- try {
+ try
+ {
sceneObjects[i].OwnershipChanged?.Invoke(masterPlayer);
}
catch (Exception e)
{
- Debug.LogError("Error in event handling.\n" + e);
+ VelNetLogger.Error("Error in event handling.\n" + e);
}
if (objects.ContainsKey(sceneObjects[i].networkId))
{
- Debug.LogError($"Duplicate NetworkID: {sceneObjects[i].networkId} {sceneObjects[i].name} {objects[sceneObjects[i].networkId]}");
+ VelNetLogger.Error($"Duplicate NetworkID: {sceneObjects[i].networkId} {sceneObjects[i].name} {objects[sceneObjects[i].networkId]}");
}
else
{
@@ -541,12 +583,12 @@ namespace VelNet
receivedMessages.Clear();
}
-
+ // reconnection
if (Time.timeAsDouble - lastConnectionCheck > 2)
{
if (!IsConnected && wasConnected)
{
- Debug.Log("Reconnecting...");
+ VelNetLogger.Info("Reconnecting...");
ConnectToServer();
}
@@ -556,7 +598,7 @@ namespace VelNet
private void LeaveRoom()
{
- Debug.Log("Leaving Room");
+ VelNetLogger.Info("Leaving Room");
string oldRoom = LocalPlayer?.room;
// delete all NetworkObjects that aren't scene objects or are null now
objects
@@ -582,7 +624,7 @@ namespace VelNet
// prevent errors in subscribers from breaking our code
catch (Exception e)
{
- Debug.LogError(e);
+ VelNetLogger.Error(e.ToString(), this);
}
foreach (NetworkObject s in sceneObjects)
@@ -604,7 +646,7 @@ namespace VelNet
///
/// Setup socket connection.
///
- public static void ConnectToServer()
+ private static void ConnectToServer()
{
try
{
@@ -613,16 +655,13 @@ namespace VelNet
}
catch (Exception e)
{
- Debug.Log("On client connect exception " + e);
+ VelNetLogger.Error("On client connect exception " + e);
}
}
private void DisconnectFromServer()
{
- Debug.Log("Disconnecting from server");
-
-
- Debug.Log("Leaving Room");
+ VelNetLogger.Info("Disconnecting from server...");
string oldRoom = LocalPlayer?.room;
// delete all NetworkObjects that aren't scene objects or are null now
objects
@@ -788,10 +827,10 @@ namespace VelNet
{
YouJoinedMessage m = new YouJoinedMessage();
int N = GetIntFromBytes(ReadExact(stream, 4));
- m.ids = new List();
+ m.playerIds = new List();
for (int i = 0; i < N; i++)
{
- m.ids.Add(GetIntFromBytes(ReadExact(stream, 4)));
+ m.playerIds.Add(GetIntFromBytes(ReadExact(stream, 4)));
}
N = stream.ReadByte();
@@ -822,11 +861,17 @@ namespace VelNet
}
}
}
-
-
- catch (Exception socketException)
+ catch (ThreadAbortException ex)
{
- Debug.Log("Socket exception: " + socketException);
+ // pass
+ }
+ catch (SocketException socketException)
+ {
+ VelNetLogger.Error("Socket exception: " + socketException);
+ }
+ catch (Exception ex)
+ {
+ VelNetLogger.Error(ex.ToString());
}
connected = false;
@@ -857,7 +902,7 @@ namespace VelNet
if (udpSocket.Available == 0)
{
Thread.Sleep(100);
- Debug.Log("Waiting for UDP response");
+ VelNetLogger.Info("Waiting for UDP response");
}
else
{
@@ -873,7 +918,7 @@ namespace VelNet
switch ((MessageReceivedType)buffer[0])
{
case MessageReceivedType.LOGGED_IN:
- Debug.Log("UDP connected");
+ VelNetLogger.Info("UDP connected");
break;
case MessageReceivedType.DATA_MESSAGE:
{
@@ -891,9 +936,17 @@ namespace VelNet
}
}
}
- catch (Exception socketException)
+ catch (ThreadAbortException ex)
{
- Debug.Log("Socket exception: " + socketException);
+ // pass
+ }
+ catch (SocketException socketException)
+ {
+ VelNetLogger.Error("Socket exception: " + socketException);
+ }
+ catch (Exception ex)
+ {
+ VelNetLogger.Error(ex.ToString());
}
}
@@ -914,10 +967,10 @@ namespace VelNet
/// True if the message successfully sent. False if it failed and we should quit
private static bool SendTcpMessage(byte[] message)
{
- // Debug.Log("Sent: " + clientMessage);
+ // Logging.Info("Sent: " + clientMessage);
if (instance.socketConnection == null)
{
- Debug.LogError("Tried to send message while socket connection was still null.", instance);
+ VelNetLogger.Error("Tried to send message while socket connection was still null.", instance);
return false;
}
@@ -927,7 +980,7 @@ namespace VelNet
if (!instance.socketConnection.Connected)
{
instance.DisconnectFromServer();
- Debug.LogError("Disconnected from server. Most likely due to timeout.");
+ VelNetLogger.Error("Disconnected from server. Most likely due to timeout.");
return false;
}
@@ -941,12 +994,12 @@ namespace VelNet
catch (IOException ioException)
{
instance.DisconnectFromServer();
- Debug.LogError("Disconnected from server. Most likely due to timeout.\n" + ioException);
+ VelNetLogger.Error("Disconnected from server. Most likely due to timeout.\n" + ioException);
return false;
}
catch (SocketException socketException)
{
- Debug.Log("Socket exception: " + socketException);
+ VelNetLogger.Error("Socket exception: " + socketException);
}
return true;
@@ -996,6 +1049,12 @@ namespace VelNet
public static void GetRoomData(string roomName)
{
+ if (string.IsNullOrEmpty(roomName))
+ {
+ VelNetLogger.Error("Room name is null. Can't get info for this room.");
+ return;
+ }
+
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
@@ -1147,14 +1206,14 @@ namespace VelNet
NetworkObject prefab = instance.prefabs.Find(p => p.name == prefabName);
if (prefab == null)
{
- Debug.LogError("Couldn't find a prefab with that name: " + prefabName);
+ VelNetLogger.Error("Couldn't find a prefab with that name: " + prefabName);
return null;
}
string networkId = localPlayer.userid + "-" + localPlayer.lastObjectId++;
if (instance.objects.ContainsKey(networkId))
{
- Debug.LogError("Can't instantiate object. Obj with that network ID was already instantiated.", instance.objects[networkId]);
+ VelNetLogger.Error("Can't instantiate object. Obj with that network ID was already instantiated.", instance.objects[networkId]);
return null;
}
@@ -1168,7 +1227,7 @@ namespace VelNet
}
catch (Exception e)
{
- Debug.LogError("Error in event handling.\n" + e);
+ VelNetLogger.Error("Error in event handling.\n" + e);
}
instance.objects.Add(newObject.networkId, newObject);
@@ -1199,8 +1258,9 @@ namespace VelNet
}
catch (Exception e)
{
- Debug.LogError("Error in event handling.\n" + e);
+ VelNetLogger.Error("Error in event handling.\n" + e);
}
+
instance.objects.Add(newObject.networkId, newObject);
}
@@ -1218,7 +1278,7 @@ namespace VelNet
if (obj == null)
{
instance.objects.Remove(networkId);
- Debug.LogError("Object to delete was already null");
+ VelNetLogger.Error("Object to delete was already null");
return;
}
@@ -1241,7 +1301,7 @@ namespace VelNet
if (obj == null)
{
instance.objects.Remove(networkId);
- Debug.LogError("Object to delete was already null");
+ // VelNetLogger.Error("Object to delete was already null");
return;
}
@@ -1263,28 +1323,28 @@ namespace VelNet
{
if (!InRoom)
{
- Debug.LogError("Can't take ownership. Not in a room.");
+ VelNetLogger.Error("Can't take ownership. Not in a room.");
return false;
}
-
+
// local player must exist
if (LocalPlayer == null)
{
- Debug.LogError("Can't take ownership. No local player.");
+ VelNetLogger.Error("Can't take ownership. No local player.");
return false;
}
// obj must exist
if (!instance.objects.ContainsKey(networkId))
{
- Debug.LogError("Can't take ownership. Object with that network id doesn't exist: " + networkId);
+ VelNetLogger.Error("Can't take ownership. Object with that network id doesn't exist: " + networkId);
return false;
}
// if the ownership is locked, fail
if (instance.objects[networkId].ownershipLocked)
{
- Debug.LogError("Can't take ownership. Ownership for this object is locked.");
+ VelNetLogger.Error("Can't take ownership. Ownership for this object is locked.");
return false;
}
@@ -1296,7 +1356,7 @@ namespace VelNet
}
catch (Exception e)
{
- Debug.LogError("Error in event handling.\n" + e);
+ VelNetLogger.Error("Error in event handling.\n" + e);
}
// must be ordered, so that ownership transfers are not confused.
diff --git a/Runtime/VelNetPlayer.cs b/Runtime/VelNetPlayer.cs
index 5ee82c5..9898bdf 100644
--- a/Runtime/VelNetPlayer.cs
+++ b/Runtime/VelNetPlayer.cs
@@ -1,7 +1,6 @@
using System.Collections.Generic;
using System;
using System.IO;
-using System.Text;
using UnityEngine;
namespace VelNet
@@ -33,7 +32,7 @@ namespace VelNet
VelNetManager.OnPlayerJoined += HandlePlayerJoined;
}
- public void HandlePlayerJoined(VelNetPlayer player)
+ public void HandlePlayerJoined(VelNetPlayer player, bool alreadyInRoom)
{
//if this is the local player, go through the objects that I own, and send instantiation messages for the ones that have prefab names
if (isLocal)
diff --git a/Samples~/Example/test.meta b/Samples~/Example.meta
similarity index 77%
rename from Samples~/Example/test.meta
rename to Samples~/Example.meta
index d6e9138..927dd88 100644
--- a/Samples~/Example/test.meta
+++ b/Samples~/Example.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 009dc4ba29f14b649beb8c3eaad89f15
+guid: f4838fd3ac54efa4c88253bb977c20c1
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Samples~/Example/Materials.meta b/Samples~/Example/Materials.meta
new file mode 100644
index 0000000..38f5869
--- /dev/null
+++ b/Samples~/Example/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dc0ae145afb98164493d097e29dfb3bd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/TransparentMat.mat b/Samples~/Example/Materials/TransparentMat.mat
similarity index 100%
rename from Samples~/Example/TransparentMat.mat
rename to Samples~/Example/Materials/TransparentMat.mat
diff --git a/Samples~/Example/TransparentMat.mat.meta b/Samples~/Example/Materials/TransparentMat.mat.meta
similarity index 100%
rename from Samples~/Example/TransparentMat.mat.meta
rename to Samples~/Example/Materials/TransparentMat.mat.meta
diff --git a/Samples~/Example/Prefabs.meta b/Samples~/Example/Prefabs.meta
new file mode 100644
index 0000000..af051bd
--- /dev/null
+++ b/Samples~/Example/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 18b28d1150d229647ae76efe2bea95f8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/PlayerPrefab.prefab b/Samples~/Example/Prefabs/PlayerPrefab.prefab
similarity index 98%
rename from Samples~/Example/PlayerPrefab.prefab
rename to Samples~/Example/Prefabs/PlayerPrefab.prefab
index 94ec1b1..02d1047 100644
--- a/Samples~/Example/PlayerPrefab.prefab
+++ b/Samples~/Example/Prefabs/PlayerPrefab.prefab
@@ -28,6 +28,7 @@ Transform:
m_LocalRotation: {x: -0.70710635, y: -0, z: -0, w: 0.7071073}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 8, y: 0.1, z: 8}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3076416102083120807}
m_RootOrder: 0
@@ -51,6 +52,7 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
@@ -114,6 +116,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6602982999811082154}
m_Father: {fileID: 0}
@@ -138,6 +141,7 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
diff --git a/Samples~/Example/PlayerPrefab.prefab.meta b/Samples~/Example/Prefabs/PlayerPrefab.prefab.meta
similarity index 100%
rename from Samples~/Example/PlayerPrefab.prefab.meta
rename to Samples~/Example/Prefabs/PlayerPrefab.prefab.meta
diff --git a/Samples~/Example/TestNetworkedGameObject.prefab b/Samples~/Example/Prefabs/TestNetworkedGameObject.prefab
similarity index 100%
rename from Samples~/Example/TestNetworkedGameObject.prefab
rename to Samples~/Example/Prefabs/TestNetworkedGameObject.prefab
diff --git a/Samples~/Example/TestNetworkedGameObject.prefab.meta b/Samples~/Example/Prefabs/TestNetworkedGameObject.prefab.meta
similarity index 100%
rename from Samples~/Example/TestNetworkedGameObject.prefab.meta
rename to Samples~/Example/Prefabs/TestNetworkedGameObject.prefab.meta
diff --git a/Samples~/Example/Scenes.meta b/Samples~/Example/Scenes.meta
new file mode 100644
index 0000000..6c58880
--- /dev/null
+++ b/Samples~/Example/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f8bb9027566930042942da486c1e29e0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/test.unity b/Samples~/Example/Scenes/Demo All.unity
similarity index 96%
rename from Samples~/Example/test.unity
rename to Samples~/Example/Scenes/Demo All.unity
index d52b46e..a816e45 100644
--- a/Samples~/Example/test.unity
+++ b/Samples~/Example/Scenes/Demo All.unity
@@ -193,6 +193,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 626742070}
m_RootOrder: 0
@@ -296,6 +297,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 138032023}
- {fileID: 1557879931}
@@ -416,6 +418,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 117638565}
m_RootOrder: 0
@@ -453,6 +456,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 711524767}
m_RootOrder: 0
@@ -595,6 +599,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1894247853}
- {fileID: 117638565}
@@ -628,8 +633,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7a7db5bc792cd471dbd8039664359eee, type: 3}
m_Name:
m_EditorClassIdentifier:
- autoConnect: 1
- autoRejoin: 1
userInput: {fileID: 626742069}
sendInput: {fileID: 0}
roomInput: {fileID: 711524768}
@@ -664,6 +667,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 948755938}
m_RootOrder: 0
@@ -777,6 +781,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
@@ -809,6 +814,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1992361063}
m_RootOrder: 0
@@ -889,6 +895,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1081889596}
m_Father: {fileID: 244561620}
@@ -1021,6 +1028,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1047954372}
m_RootOrder: 1
@@ -1138,7 +1146,10 @@ MonoBehaviour:
m_HideMobileInput: 0
m_CharacterValidation: 0
m_CharacterLimit: 0
- m_OnEndEdit:
+ m_OnSubmit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnDidEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
@@ -1162,6 +1173,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2034439}
- {fileID: 1560686264}
@@ -1300,6 +1312,7 @@ Transform:
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
@@ -1333,6 +1346,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 162005664}
- {fileID: 1484033256}
@@ -1395,7 +1409,10 @@ MonoBehaviour:
m_HideMobileInput: 0
m_CharacterValidation: 0
m_CharacterLimit: 0
- m_OnEndEdit:
+ m_OnSubmit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnDidEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
@@ -1517,6 +1534,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1047954372}
m_RootOrder: 2
@@ -1555,6 +1573,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1401860307}
m_Father: {fileID: 244561620}
@@ -1753,6 +1772,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -20}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
@@ -1786,6 +1806,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1055818112}
m_Father: {fileID: 927188573}
@@ -1876,6 +1897,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 912887456}
- {fileID: 1154194182}
@@ -1986,6 +2008,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 359309141}
- {fileID: 1840952814}
@@ -2084,7 +2107,10 @@ MonoBehaviour:
m_HideMobileInput: 0
m_CharacterValidation: 0
m_CharacterLimit: 0
- m_OnEndEdit:
+ m_OnSubmit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnDidEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
@@ -2164,6 +2190,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 244561620}
m_RootOrder: 10
@@ -2242,6 +2269,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2144436500}
- {fileID: 615558652}
@@ -2328,6 +2356,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1047954372}
m_Father: {fileID: 912887456}
@@ -2366,6 +2395,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 545137760}
m_RootOrder: 0
@@ -2428,6 +2458,7 @@ GameObject:
- component: {fileID: 1099803615}
- component: {fileID: 1099803616}
- component: {fileID: 1099803613}
+ - component: {fileID: 1099803614}
m_Layer: 0
m_Name: NetworkManager
m_TagString: Untagged
@@ -2448,6 +2479,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
playerPrefab: {fileID: 6139051692386484099, guid: d4158ab9c4a204cdbba28d3273fc1fb3, type: 3}
+--- !u!114 &1099803614
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1099803612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5ea1fe0eb58e4184bbb2edcc99c51119, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!4 &1099803615
Transform:
m_ObjectHideFlags: 0
@@ -2458,6 +2501,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
@@ -2474,10 +2518,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
m_Name:
m_EditorClassIdentifier:
- host: velnet-lts.ugavel.com
+ host: vn.ugavel.com
port: 5000
udpConnected: 0
userid: -1
+ debugMessages: 1
+ autoLogin: 1
+ onlyConnectToSameVersion: 1
connected: 0
prefabs:
- {fileID: 9102273340480352682, guid: d4158ab9c4a204cdbba28d3273fc1fb3, type: 3}
@@ -2513,6 +2560,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1679565284}
m_Father: {fileID: 927188573}
@@ -2639,6 +2687,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1295274441}
m_Father: {fileID: 244561620}
@@ -2771,6 +2820,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1278634767}
m_RootOrder: 0
@@ -2850,6 +2900,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 864104176}
m_RootOrder: 0
@@ -2929,6 +2980,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1997780490}
m_RootOrder: 0
@@ -3024,6 +3076,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 818.5, y: 223, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
@@ -3130,6 +3183,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 711524767}
m_RootOrder: 1
@@ -3209,6 +3263,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 244561620}
m_RootOrder: 11
@@ -3288,6 +3343,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 117638565}
m_RootOrder: 1
@@ -3363,6 +3419,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 626742070}
m_RootOrder: 1
@@ -3440,6 +3497,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2033163677}
m_Father: {fileID: 1154194182}
@@ -3479,6 +3537,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2118429759}
m_Father: {fileID: 244561620}
@@ -3611,6 +3670,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 948755938}
m_RootOrder: 1
@@ -3690,6 +3750,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 244561620}
m_RootOrder: 0
@@ -3770,6 +3831,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 498776800}
m_Father: {fileID: 948755938}
@@ -3903,6 +3965,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1428857710}
m_Father: {fileID: 244561620}
@@ -4007,6 +4070,71 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1997780489}
m_CullTransparentMesh: 1
+--- !u!1 &2021764943
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2021764946}
+ - component: {fileID: 2021764945}
+ - component: {fileID: 2021764944}
+ m_Layer: 0
+ m_Name: TestRPC Object
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &2021764944
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2021764943}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5515094c5c544b6b8ed7fd51a86548d4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ownershipLocked: 0
+ networkId:
+ sceneNetworkId: 102
+ prefabName:
+ isSceneObject: 1
+ syncedComponents:
+ - {fileID: 2021764945}
+--- !u!114 &2021764945
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2021764943}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2bcc94802a5742d4299e48c898e52dfa, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ networkObject: {fileID: 2021764944}
+--- !u!4 &2021764946
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2021764943}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 2.9278836, y: 2.2367568, z: 0.06653424}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2033163676
GameObject:
m_ObjectHideFlags: 0
@@ -4035,6 +4163,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1679565284}
m_RootOrder: 0
@@ -4110,6 +4239,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1760805525}
m_RootOrder: 0
@@ -4189,6 +4319,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1047954372}
m_RootOrder: 0
@@ -4251,6 +4382,10 @@ PrefabInstance:
propertyPath: sceneNetworkId
value: 100
objectReference: {fileID: 0}
+ - target: {fileID: 8565720275311462452, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
+ propertyPath: m_Enabled
+ value: 1
+ objectReference: {fileID: 0}
- target: {fileID: 8565720275311462453, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
propertyPath: m_Name
value: TestNetworkedGameObject
diff --git a/Samples~/Example/test.unity.meta b/Samples~/Example/Scenes/Demo All.unity.meta
similarity index 100%
rename from Samples~/Example/test.unity.meta
rename to Samples~/Example/Scenes/Demo All.unity.meta
diff --git a/Samples~/Example/test_binary.unity b/Samples~/Example/Scenes/Simple Connection Example.unity
similarity index 59%
rename from Samples~/Example/test_binary.unity
rename to Samples~/Example/Scenes/Simple Connection Example.unity
index 13b93be..0e75daa 100644
--- a/Samples~/Example/test_binary.unity
+++ b/Samples~/Example/Scenes/Simple Connection Example.unity
@@ -123,7 +123,7 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &516411417
+--- !u!1 &561771045
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -131,104 +131,54 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 516411421}
- - component: {fileID: 516411420}
- - component: {fileID: 516411419}
- - component: {fileID: 516411418}
+ - component: {fileID: 561771047}
+ - component: {fileID: 561771046}
m_Layer: 0
- m_Name: Main Camera
- m_TagString: MainCamera
+ m_Name: VelNet Manager
+ m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &516411418
+--- !u!114 &561771046
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 516411417}
+ m_GameObject: {fileID: 561771045}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
m_Name:
m_EditorClassIdentifier:
- host: 127.0.0.1
- port: 80
+ host: vn.ugavel.com
+ port: 5000
udpConnected: 0
userid: -1
- room:
+ debugMessages: 1
+ autoLogin: 1
+ onlyConnectToSameVersion: 0
connected: 0
prefabs: []
sceneObjects: []
deletedSceneObjects: []
---- !u!81 &516411419
-AudioListener:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 516411417}
- m_Enabled: 1
---- !u!20 &516411420
-Camera:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 516411417}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 1
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
- m_projectionMatrixMode: 1
- m_GateFitMode: 2
- m_FOVAxisMode: 0
- m_SensorSize: {x: 36, y: 24}
- m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.3
- far clip plane: 1000
- field of view: 60
- orthographic: 0
- orthographic size: 5
- m_Depth: -1
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 1
- m_AllowMSAA: 1
- m_AllowDynamicResolution: 0
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
---- !u!4 &516411421
+--- !u!4 &561771047
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 516411417}
+ m_GameObject: {fileID: 561771045}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 0
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &756322628
+--- !u!1 &951053497
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -236,8 +186,8 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 756322630}
- - component: {fileID: 756322629}
+ - component: {fileID: 951053499}
+ - component: {fileID: 951053498}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
@@ -245,13 +195,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!108 &756322629
+--- !u!108 &951053498
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 756322628}
+ m_GameObject: {fileID: 951053497}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
@@ -307,17 +257,238 @@ Light:
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
---- !u!4 &756322630
+--- !u!4 &951053499
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 756322628}
+ m_GameObject: {fileID: 951053497}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &958953873
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 958953877}
+ - component: {fileID: 958953876}
+ - component: {fileID: 958953875}
+ - component: {fileID: 958953874}
+ - component: {fileID: 958953879}
+ - component: {fileID: 958953878}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &958953874
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &958953875
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &958953876
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &958953877
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &958953878
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3f1f9b0bbd93a484a987c51f1107ebe5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ networkObject: {fileID: 958953879}
+ serializationRateHz: 30
+ hybridOnChangeCompression: 1
+ useLocalTransform: 0
+ teleportDistance: 0
+ teleportAngle: 0
+--- !u!114 &958953879
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 958953873}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5515094c5c544b6b8ed7fd51a86548d4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ownershipLocked: 0
+ networkId:
+ sceneNetworkId: 100
+ prefabName:
+ isSceneObject: 1
+ syncedComponents:
+ - {fileID: 958953878}
+--- !u!1 &1615517332
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1615517335}
+ - component: {fileID: 1615517334}
+ - component: {fileID: 1615517333}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &1615517333
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1615517332}
+ m_Enabled: 1
+--- !u!20 &1615517334
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1615517332}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &1615517335
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1615517332}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Samples~/Example/test_binary.unity.meta b/Samples~/Example/Scenes/Simple Connection Example.unity.meta
similarity index 74%
rename from Samples~/Example/test_binary.unity.meta
rename to Samples~/Example/Scenes/Simple Connection Example.unity.meta
index 276a764..601fe08 100644
--- a/Samples~/Example/test_binary.unity.meta
+++ b/Samples~/Example/Scenes/Simple Connection Example.unity.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 2e6e0ddeb76e51b46afc0f0a43386ff2
+guid: 3e0da379b7e26cf4384f5cdff10f4fda
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Samples~/Example/Scripts.meta b/Samples~/Example/Scripts.meta
new file mode 100644
index 0000000..f2cbcac
--- /dev/null
+++ b/Samples~/Example/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cd6dd1d4e81bce64faaf29eedf9d2a63
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/Scripts/CustomMessageTest.cs b/Samples~/Example/Scripts/CustomMessageTest.cs
new file mode 100644
index 0000000..789e70d
--- /dev/null
+++ b/Samples~/Example/Scripts/CustomMessageTest.cs
@@ -0,0 +1,22 @@
+using UnityEngine;
+using VelNet;
+
+public class CustomMessageTest : MonoBehaviour
+{
+ private void Start()
+ {
+ VelNetManager.OnJoinedRoom += _ =>
+ {
+ byte[] testPacket = { 244 };
+ VelNetManager.SendCustomMessage(testPacket, true, true, false);
+ };
+
+ VelNetManager.CustomMessageReceived += (senderId, dataWithCategory) =>
+ {
+ if (dataWithCategory[0] == 244)
+ {
+ Debug.Log($"Received test packet from {senderId}");
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/Samples~/Example/Scripts/CustomMessageTest.cs.meta b/Samples~/Example/Scripts/CustomMessageTest.cs.meta
new file mode 100644
index 0000000..354019c
--- /dev/null
+++ b/Samples~/Example/Scripts/CustomMessageTest.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ea1fe0eb58e4184bbb2edcc99c51119
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/MouseDragger.cs b/Samples~/Example/Scripts/MouseDragger.cs
similarity index 100%
rename from Samples~/Example/MouseDragger.cs
rename to Samples~/Example/Scripts/MouseDragger.cs
diff --git a/Samples~/Example/MouseDragger.cs.meta b/Samples~/Example/Scripts/MouseDragger.cs.meta
similarity index 100%
rename from Samples~/Example/MouseDragger.cs.meta
rename to Samples~/Example/Scripts/MouseDragger.cs.meta
diff --git a/Samples~/Example/NetworkGUI.cs b/Samples~/Example/Scripts/NetworkGUI.cs
similarity index 66%
rename from Samples~/Example/NetworkGUI.cs
rename to Samples~/Example/Scripts/NetworkGUI.cs
index 7cc8b6d..f938720 100644
--- a/Samples~/Example/NetworkGUI.cs
+++ b/Samples~/Example/Scripts/NetworkGUI.cs
@@ -8,9 +8,6 @@ namespace VelNet
{
public class NetworkGUI : MonoBehaviour
{
- public bool autoConnect = true;
- public bool autoRejoin = true;
-
public InputField userInput;
public InputField sendInput;
public InputField roomInput;
@@ -40,7 +37,7 @@ namespace VelNet
{
if (VelNetManager.IsConnected)
{
- VelNetManager.GetRoomData("0");
+ VelNetManager.GetRoomData(VelNetManager.Room);
}
}
@@ -62,44 +59,6 @@ namespace VelNet
{
comms = FindObjectOfType();
microphones.AddOptions(new List(Microphone.devices));
-
- if (autoConnect)
- {
- AutoJoin();
- }
- }
-
- private void AutoJoin()
- {
- VelNetManager.OnConnectedToServer += Login;
-
- void Login()
- {
- if (!autoRejoin)
- {
- VelNetManager.OnConnectedToServer -= Login;
- }
-
- HandleLogin();
- VelNetManager.OnLoggedIn += JoinRoom;
-
- void JoinRoom()
- {
- HandleJoin();
- VelNetManager.OnLoggedIn -= JoinRoom;
- }
- }
- }
-
- private void Update()
- {
- if (autoRejoin)
- {
- if (!VelNetManager.IsConnected)
- {
- AutoJoin();
- }
- }
}
public void handleMicrophoneSelection()
diff --git a/Samples~/Example/NetworkGUI.cs.meta b/Samples~/Example/Scripts/NetworkGUI.cs.meta
similarity index 100%
rename from Samples~/Example/NetworkGUI.cs.meta
rename to Samples~/Example/Scripts/NetworkGUI.cs.meta
diff --git a/Samples~/Example/PlayerController.cs b/Samples~/Example/Scripts/PlayerController.cs
similarity index 100%
rename from Samples~/Example/PlayerController.cs
rename to Samples~/Example/Scripts/PlayerController.cs
diff --git a/Samples~/Example/PlayerController.cs.meta b/Samples~/Example/Scripts/PlayerController.cs.meta
similarity index 100%
rename from Samples~/Example/PlayerController.cs.meta
rename to Samples~/Example/Scripts/PlayerController.cs.meta
diff --git a/Samples~/Example/Scripts/RPCTest.cs b/Samples~/Example/Scripts/RPCTest.cs
new file mode 100644
index 0000000..ca3de9a
--- /dev/null
+++ b/Samples~/Example/Scripts/RPCTest.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using VelNet;
+
+public class RPCTest : NetworkComponent
+{
+ private void Update()
+ {
+ if (Input.GetKeyDown(KeyCode.R))
+ {
+ SendRPC(nameof(TestRPC), true);
+ }
+ }
+
+ private void TestRPC()
+ {
+ Debug.Log("RPC RECEIVED!");
+ }
+
+ public override void ReceiveBytes(byte[] message)
+ {
+ Debug.Log("WOW. BYTES");
+ }
+}
\ No newline at end of file
diff --git a/Samples~/Example/Scripts/RPCTest.cs.meta b/Samples~/Example/Scripts/RPCTest.cs.meta
new file mode 100644
index 0000000..6f48220
--- /dev/null
+++ b/Samples~/Example/Scripts/RPCTest.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2bcc94802a5742d4299e48c898e52dfa
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Samples~/Example/SyncedTextbox.cs b/Samples~/Example/Scripts/SyncedTextbox.cs
similarity index 100%
rename from Samples~/Example/SyncedTextbox.cs
rename to Samples~/Example/Scripts/SyncedTextbox.cs
diff --git a/Samples~/Example/SyncedTextbox.cs.meta b/Samples~/Example/Scripts/SyncedTextbox.cs.meta
similarity index 100%
rename from Samples~/Example/SyncedTextbox.cs.meta
rename to Samples~/Example/Scripts/SyncedTextbox.cs.meta
diff --git a/Samples~/Example/VelNetMan.cs b/Samples~/Example/Scripts/VelNetMan.cs
similarity index 100%
rename from Samples~/Example/VelNetMan.cs
rename to Samples~/Example/Scripts/VelNetMan.cs
diff --git a/Samples~/Example/VelNetMan.cs.meta b/Samples~/Example/Scripts/VelNetMan.cs.meta
similarity index 100%
rename from Samples~/Example/VelNetMan.cs.meta
rename to Samples~/Example/Scripts/VelNetMan.cs.meta
diff --git a/package.json b/package.json
index 5405c76..9898bec 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "edu.uga.engr.vel.velnet",
"displayName": "VelNet",
- "version": "1.0.13",
+ "version": "1.1.0",
"unity": "2019.1",
"description": "A custom networking library for Unity.",
"keywords": [