older velnet changes - seems to be mostly samples

main
Anton Franzluebbers 2022-08-15 12:53:49 -04:00
parent a77cfc8a19
commit 4896d802ac
13 changed files with 191 additions and 112 deletions

19
.github/workflows/npm-publish.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: Publish to Verdaccio
on:
push:
branches:
- main
jobs:
publish-npm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
registry-url: http://npm.ugavel.com/
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.VERDACCIO_TOKEN}}

View File

@ -5,7 +5,7 @@ Custom networking package for Unity
--- ---
See [VelNetServer](https://github.com/velaboratory/VelNetServer) for description of the server. See [VelNetServerRust](https://github.com/velaboratory/VelNetServerRust) for description of the server.
By contrast to the server, the Unity side is pretty complex. By contrast to the server, the Unity side is pretty complex.

View File

@ -29,6 +29,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 8565720275311462455} m_Father: {fileID: 8565720275311462455}
m_RootOrder: 0 m_RootOrder: 0
@ -52,6 +53,7 @@ MeshRenderer:
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1 m_MotionVectors: 1
m_LightProbeUsage: 1 m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1 m_ReflectionProbeUsage: 1
@ -123,6 +125,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 7099230484513283147} - {fileID: 7099230484513283147}
m_Father: {fileID: 0} m_Father: {fileID: 0}
@ -162,6 +165,9 @@ MonoBehaviour:
networkObject: {fileID: 3951900052977689805} networkObject: {fileID: 3951900052977689805}
serializationRateHz: 60 serializationRateHz: 60
hybridOnChangeCompression: 1 hybridOnChangeCompression: 1
position: 1
rotation: 1
scale: 0
useLocalTransform: 0 useLocalTransform: 0
teleportDistance: 0 teleportDistance: 0
teleportAngle: 0 teleportAngle: 0

View File

@ -1,22 +1,25 @@
using UnityEngine; using UnityEngine;
using VelNet; using VelNet;
public class CustomMessageTest : MonoBehaviour namespace VelNetExample
{ {
private void Start() public class CustomMessageTest : MonoBehaviour
{ {
VelNetManager.OnJoinedRoom += _ => private void Start()
{ {
byte[] testPacket = { 244 }; VelNetManager.OnJoinedRoom += _ =>
VelNetManager.SendCustomMessage(testPacket, true, true, false);
};
VelNetManager.CustomMessageReceived += (senderId, dataWithCategory) =>
{
if (dataWithCategory[0] == 244)
{ {
Debug.Log($"Received test packet from {senderId}"); byte[] testPacket = { 244 };
} VelNetManager.SendCustomMessage(testPacket, true, true, false);
}; };
VelNetManager.CustomMessageReceived += (senderId, dataWithCategory) =>
{
if (dataWithCategory[0] == 244)
{
Debug.Log($"Received test packet from {senderId}");
}
};
}
} }
} }

View File

@ -1,44 +1,47 @@
using UnityEngine; using UnityEngine;
using VelNet; using VelNet;
public class MouseDragger : MonoBehaviour namespace VelNetExample
{ {
private Camera cam; public class MouseDragger : MonoBehaviour
public string[] draggableTags = { "draggable" };
private NetworkObject draggingObject;
private void Start()
{ {
cam = Camera.main; private Camera cam;
} public string[] draggableTags = { "draggable" };
private NetworkObject draggingObject;
private void Update() private void Start()
{
if (Input.GetMouseButtonDown(0))
{ {
if (Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) cam = Camera.main;
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{ {
foreach (string draggableTag in draggableTags) if (Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out RaycastHit hit))
{ {
if (hit.transform.CompareTag(draggableTag) || (hit.transform.parent != null && hit.transform.parent.CompareTag(draggableTag))) foreach (string draggableTag in draggableTags)
{ {
NetworkObject netObj = hit.transform.GetComponent<NetworkObject>(); if (hit.transform.CompareTag(draggableTag) || (hit.transform.parent != null && hit.transform.parent.CompareTag(draggableTag)))
netObj ??= hit.transform.GetComponentInParent<NetworkObject>(); {
if (netObj == null) break; NetworkObject netObj = hit.transform.GetComponent<NetworkObject>();
netObj.TakeOwnership(); netObj ??= hit.transform.GetComponentInParent<NetworkObject>();
draggingObject = netObj; if (netObj == null) break;
break; netObj.TakeOwnership();
draggingObject = netObj;
break;
}
} }
} }
} }
} else if (Input.GetMouseButtonUp(0))
else if (Input.GetMouseButtonUp(0)) {
{ draggingObject = null;
draggingObject = null; }
} else if (Input.GetMouseButton(0) && draggingObject != null)
else if (Input.GetMouseButton(0) && draggingObject != null) {
{ draggingObject.transform.position = cam.ScreenPointToRay(Input.mousePosition).direction * Vector3.Distance(draggingObject.transform.position, cam.transform.position) + cam.transform.position;
draggingObject.transform.position = cam.ScreenPointToRay(Input.mousePosition).direction * Vector3.Distance(draggingObject.transform.position, cam.transform.position) + cam.transform.position; }
} }
} }
} }

View File

@ -3,8 +3,10 @@ using System.Collections.Generic;
using Dissonance; using Dissonance;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using VelNet;
namespace VelNet
namespace VelNetExample
{ {
public class NetworkGUI : MonoBehaviour public class NetworkGUI : MonoBehaviour
{ {

View File

@ -2,9 +2,10 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using VelNet;
using Random = UnityEngine.Random; using Random = UnityEngine.Random;
namespace VelNet namespace VelNetExample
{ {
public class PlayerController : NetworkSerializedObjectStream public class PlayerController : NetworkSerializedObjectStream
{ {

View File

@ -4,23 +4,26 @@ using System.IO;
using UnityEngine; using UnityEngine;
using VelNet; using VelNet;
public class RPCTest : NetworkComponent namespace VelNetExample
{ {
private void Update() public class RPCTest : NetworkComponent
{ {
if (Input.GetKeyDown(KeyCode.R)) private void Update()
{ {
SendRPC(nameof(TestRPC), true); 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");
} }
} }
private void TestRPC()
{
Debug.Log("RPC RECEIVED!");
}
public override void ReceiveBytes(byte[] message)
{
Debug.Log("WOW. BYTES");
}
} }

View File

@ -2,23 +2,26 @@ using System.IO;
using UnityEngine.UI; using UnityEngine.UI;
using VelNet; using VelNet;
public class SyncedTextbox : NetworkSerializedObjectStream namespace VelNetExample
{ {
public InputField text; public class SyncedTextbox : NetworkSerializedObjectStream
protected override void SendState(BinaryWriter binaryWriter)
{ {
binaryWriter.Write(text.text); public InputField text;
}
protected override void ReceiveState(BinaryReader binaryReader)
{
text.text = binaryReader.ReadString();
}
public void TakeOwnership() protected override void SendState(BinaryWriter binaryWriter)
{ {
networkObject.TakeOwnership(); binaryWriter.Write(text.text);
}
protected override void ReceiveState(BinaryReader binaryReader)
{
text.text = binaryReader.ReadString();
}
public void TakeOwnership()
{
networkObject.TakeOwnership();
}
} }
} }

View File

@ -1,16 +1,19 @@
using UnityEngine; using UnityEngine;
using VelNet; using VelNet;
public class VelNetMan : MonoBehaviour namespace VelNetExample
{ {
public GameObject playerPrefab; public class VelNetMan : MonoBehaviour
// Start is called before the first frame update
private void Start()
{ {
VelNetManager.OnJoinedRoom += player => public GameObject playerPrefab;
// Start is called before the first frame update
private void Start()
{ {
VelNetManager.NetworkInstantiate(playerPrefab.name); VelNetManager.OnJoinedRoom += player =>
}; {
VelNetManager.NetworkInstantiate(playerPrefab.name);
};
}
} }
} }

View File

@ -9,12 +9,18 @@ namespace VelNet
[AddComponentMenu("VelNet/VelNet Sync Transform")] [AddComponentMenu("VelNet/VelNet Sync Transform")]
public class SyncTransform : NetworkSerializedObjectStream public class SyncTransform : NetworkSerializedObjectStream
{ {
public bool useLocalTransform; [Space]
[Tooltip("0 to disable.")] public bool position = true;
public float teleportDistance; public bool rotation = true;
[Tooltip("0 to disable.")] [Tooltip("Scale is always local")] public bool scale;
public float teleportAngle;
[Space]
public bool useLocalTransform;
[Tooltip("0 to disable.")] public float teleportDistance;
[Tooltip("0 to disable.")] public float teleportAngle;
private Vector3 targetScale;
private Vector3 targetPosition; private Vector3 targetPosition;
private Quaternion targetRotation; private Quaternion targetRotation;
private float distanceAtReceiveTime; private float distanceAtReceiveTime;
@ -32,6 +38,8 @@ namespace VelNet
targetPosition = transform.position; targetPosition = transform.position;
targetRotation = transform.rotation; targetRotation = transform.rotation;
} }
targetScale = transform.localScale;
} }
/// <summary> /// <summary>
@ -39,8 +47,9 @@ namespace VelNet
/// </summary> /// </summary>
protected override void SendState(BinaryWriter writer) protected override void SendState(BinaryWriter writer)
{ {
writer.Write(transform.localPosition); if (position) writer.Write(transform.localPosition);
writer.Write(transform.localRotation); if (rotation) writer.Write(transform.localRotation);
if (scale) writer.Write(transform.localScale);
} }
/// <summary> /// <summary>
@ -49,8 +58,9 @@ namespace VelNet
/// </summary> /// </summary>
protected override void ReceiveState(BinaryReader reader) protected override void ReceiveState(BinaryReader reader)
{ {
targetPosition = reader.ReadVector3(); if (position) targetPosition = reader.ReadVector3();
targetRotation = reader.ReadQuaternion(); if (rotation) targetRotation = reader.ReadQuaternion();
if (scale) targetScale = reader.ReadVector3();
// record the distance from the target for interpolation // record the distance from the target for interpolation
if (useLocalTransform) if (useLocalTransform)
@ -61,6 +71,7 @@ namespace VelNet
{ {
transform.localPosition = targetPosition; transform.localPosition = targetPosition;
} }
if (teleportAngle != 0 && teleportAngle < angleAtReceiveTime) if (teleportAngle != 0 && teleportAngle < angleAtReceiveTime)
{ {
transform.localRotation = targetRotation; transform.localRotation = targetRotation;
@ -74,6 +85,7 @@ namespace VelNet
{ {
transform.position = targetPosition; transform.position = targetPosition;
} }
if (teleportAngle != 0 && teleportAngle < angleAtReceiveTime) if (teleportAngle != 0 && teleportAngle < angleAtReceiveTime)
{ {
transform.rotation = targetRotation; transform.rotation = targetRotation;
@ -87,28 +99,52 @@ namespace VelNet
if (useLocalTransform) if (useLocalTransform)
{ {
transform.localPosition = Vector3.MoveTowards( if (position)
transform.localPosition, {
targetPosition, transform.localPosition = Vector3.MoveTowards(
Time.deltaTime * distanceAtReceiveTime * serializationRateHz transform.localPosition,
); targetPosition,
transform.localRotation = Quaternion.RotateTowards( Time.deltaTime * distanceAtReceiveTime * serializationRateHz
transform.localRotation, );
targetRotation, }
Time.deltaTime * angleAtReceiveTime * serializationRateHz
); if (rotation)
{
transform.localRotation = Quaternion.RotateTowards(
transform.localRotation,
targetRotation,
Time.deltaTime * angleAtReceiveTime * serializationRateHz
);
}
} }
else else
{ {
transform.position = Vector3.MoveTowards( if (position)
transform.position, {
targetPosition, transform.position = Vector3.MoveTowards(
Time.deltaTime * distanceAtReceiveTime * serializationRateHz transform.position,
); targetPosition,
transform.rotation = Quaternion.RotateTowards( Time.deltaTime * distanceAtReceiveTime * serializationRateHz
transform.rotation, );
targetRotation, }
Time.deltaTime * angleAtReceiveTime * serializationRateHz
if (rotation)
{
transform.rotation = Quaternion.RotateTowards(
transform.rotation,
targetRotation,
Time.deltaTime * angleAtReceiveTime * serializationRateHz
);
}
}
if (scale)
{
transform.localScale = Vector3.Lerp(
transform.localScale,
targetScale,
Time.deltaTime * serializationRateHz
); );
} }
} }

View File

@ -1206,7 +1206,7 @@ namespace VelNet
NetworkObject prefab = instance.prefabs.Find(p => p.name == prefabName); NetworkObject prefab = instance.prefabs.Find(p => p.name == prefabName);
if (prefab == null) if (prefab == null)
{ {
VelNetLogger.Error("Couldn't find a prefab with that name: " + prefabName); VelNetLogger.Error("Couldn't find a prefab with that name: " + prefabName + "\nMake sure to add the prefab to list of prefabs in VelNetManager");
return null; return null;
} }

View File

@ -12,4 +12,4 @@ MonoBehaviour:
m_Script: {fileID: 0} m_Script: {fileID: 0}
m_Name: m_Name:
m_EditorClassIdentifier: Unity.Rider.Editor:Packages.Rider.Editor:RiderScriptEditorPersistedState m_EditorClassIdentifier: Unity.Rider.Editor:Packages.Rider.Editor:RiderScriptEditorPersistedState
lastWriteTicks: -8585433455978485828 lastWriteTicks: -8585432596162049605