[Add] FishNet
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
public class DestroyAfterDelay : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private float _delay = 1f;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Destroy(gameObject, _delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f244f524a030c6459722c6594b1e9bd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/DestroyAfterDelay.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a9331e21bfaa0a4aaac4ffe7d8d644c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,60 @@
|
||||
using FishNet.Object;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
/// <summary>
|
||||
/// DEMO. CODE IS NOT OPTIMIZED.
|
||||
/// Aims the camera.
|
||||
/// </summary>
|
||||
public class Aim : NetworkBehaviour
|
||||
{
|
||||
public PlayerCamera PlayerCamera { get; private set; }
|
||||
private readonly Vector3 _offset = new(0f, 1.65f, 0f);
|
||||
|
||||
public override void OnStartClient()
|
||||
{
|
||||
if (IsOwner)
|
||||
PlayerCamera = Camera.main.transform.GetComponent<PlayerCamera>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!IsOwner || PlayerCamera == null)
|
||||
return;
|
||||
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
Cursor.visible = false;
|
||||
MoveAim();
|
||||
MoveCamera();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aims camera.
|
||||
/// </summary>
|
||||
private void MoveAim()
|
||||
{
|
||||
float speed = 2f;
|
||||
// Yaw.
|
||||
transform.Rotate(new(0f, Input.GetAxis("Mouse X") * speed, 0f));
|
||||
// Pitch.
|
||||
float pitch = PlayerCamera.transform.eulerAngles.x - Input.GetAxis("Mouse Y") * speed;
|
||||
/* If not signed on X then make it
|
||||
* signed for easy clamping. */
|
||||
if (pitch > 180f)
|
||||
pitch -= 360f;
|
||||
pitch = Mathf.Clamp(pitch, -89f, 89f);
|
||||
|
||||
PlayerCamera.transform.eulerAngles = new(pitch, transform.eulerAngles.y, transform.eulerAngles.z);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves camera.
|
||||
/// </summary>
|
||||
private void MoveCamera()
|
||||
{
|
||||
PlayerCamera.transform.position = transform.position + _offset;
|
||||
PlayerCamera.transform.rotation = Quaternion.Euler(PlayerCamera.transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6d656f377f37164d8d7431aa4e43cdb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Player/Aim.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,17 @@
|
||||
using FishNet.Component.ColliderRollback;
|
||||
using FishNet.Managing.Timing;
|
||||
using FishNet.Object;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
/// <summary>
|
||||
/// DEMO. CODE IS NOT OPTIMIZED.
|
||||
/// Fires at objects.
|
||||
/// </summary>
|
||||
public class Fire : NetworkBehaviour
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9d3558aad46c24549bea48d0e3938264
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Player/Fire.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,16 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
/// <summary>
|
||||
/// DEMO. CODE IS NOT OPTIMIZED.
|
||||
/// Doesn't do much...
|
||||
/// </summary>
|
||||
public class PlayerCamera : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// MuzzleFlash on the weapon.
|
||||
/// </summary>
|
||||
public Transform MuzzleFlash;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe0209d73083bf744ba4925f8cad7144
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Player/PlayerCamera.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,41 @@
|
||||
using FishNet.Object;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
/// <summary>
|
||||
/// DEMO. CODE IS NOT OPTIMIZED.
|
||||
/// Moves the player around.
|
||||
/// </summary>
|
||||
public class PlayerMotor : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private float _moveRate = 3f;
|
||||
private CharacterController _characterController;
|
||||
|
||||
public override void OnStartClient()
|
||||
{
|
||||
if (IsOwner)
|
||||
_characterController = GetComponent<CharacterController>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (IsOwner)
|
||||
{
|
||||
Move();
|
||||
}
|
||||
}
|
||||
|
||||
private void Move()
|
||||
{
|
||||
if (_characterController == null)
|
||||
return;
|
||||
|
||||
Vector3 gravity = new(0f, -10f, 0f);
|
||||
Vector3 inputs = transform.TransformDirection(new(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")));
|
||||
|
||||
_characterController.Move((gravity + inputs) * _moveRate * Time.deltaTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c718ab30626bbd648952910f74780a06
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Player/PlayerMotor.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9b80990f4a80a944c9394e21c9c2187c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
using FishNet.Connection;
|
||||
using FishNet.Object;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
/// <summary>
|
||||
/// DEMO. CODE IS NOT OPTIMIZED.
|
||||
/// Shows where an object was when client hit it, and where it was after server rolled it back.
|
||||
/// </summary>
|
||||
public class RollbackVisualizer : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private GameObject _originalPrefab;
|
||||
[SerializeField]
|
||||
private GameObject _rollbackPrefab;
|
||||
[SerializeField]
|
||||
private TextCanvas _textCanvasPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// Shows difference between where object was when client shot it, and where it was after rollback.
|
||||
/// </summary>
|
||||
/// <param name = "original"></param>
|
||||
/// <param name = "rolledBack"></param>
|
||||
[Server]
|
||||
public void ShowDifference(NetworkObject clientObject, Vector3 original, Vector3 rolledBack)
|
||||
{
|
||||
TargetShowDifference(clientObject.Owner, original, rolledBack);
|
||||
}
|
||||
|
||||
[TargetRpc]
|
||||
private void TargetShowDifference(NetworkConnection conn, Vector3 original, Vector3 rollback)
|
||||
{
|
||||
Instantiate(_originalPrefab, original, transform.rotation);
|
||||
Instantiate(_rollbackPrefab, rollback, transform.rotation);
|
||||
|
||||
float difference = Vector3.Distance(original, rollback);
|
||||
if (difference <= 0.00001f)
|
||||
difference = 0f;
|
||||
|
||||
_differences.Add(difference);
|
||||
if (_differences.Count > 20)
|
||||
_differences.RemoveAt(0);
|
||||
float averageDifference = _differences.Sum() / _differences.Count;
|
||||
|
||||
string accuracyText = IsServerStarted ? $"Accuracy will not show properly when as clientHost.{Environment.NewLine}Use a separate client and server for testing." : $"Difference {difference.ToString("0.000")}m. Average difference {averageDifference.ToString("0.000")}m.";
|
||||
|
||||
TextCanvas tc = Instantiate(_textCanvasPrefab);
|
||||
tc.SetText(accuracyText);
|
||||
Debug.Log(accuracyText);
|
||||
}
|
||||
|
||||
private List<float> _differences = new();
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c5d5c9fcdb14704d9c64b18dc05a809
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Rollback Visualization/RollbackVisualizer.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,25 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
public class TextCanvas : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private Text _text;
|
||||
private static TextCanvas _instance;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance != null)
|
||||
Destroy(_instance.gameObject);
|
||||
|
||||
_instance = this;
|
||||
}
|
||||
|
||||
public void SetText(string text)
|
||||
{
|
||||
_text.text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0dc71af4e9bb144195230171a19cca9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Rollback Visualization/TextCanvas.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,30 @@
|
||||
using FishNet.Object;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishNet.Example.ColliderRollbacks
|
||||
{
|
||||
public class Strafe : NetworkBehaviour
|
||||
{
|
||||
public float MoveRate = 2f;
|
||||
public float MoveDistance = 3f;
|
||||
private bool _movingRight = true;
|
||||
private float _startX;
|
||||
|
||||
public override void OnStartServer()
|
||||
{
|
||||
_startX = transform.position.x;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (IsServerStarted)
|
||||
{
|
||||
float x = _movingRight ? _startX + MoveDistance : _startX - MoveDistance;
|
||||
Vector3 goal = new(x, transform.position.y, transform.position.z);
|
||||
transform.position = Vector3.MoveTowards(transform.position, goal, MoveRate * Time.deltaTime);
|
||||
if (transform.position == goal)
|
||||
_movingRight = !_movingRight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 088014ab71fc022458b82ed8c9792b1b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/Demos/ColliderRollback/Scripts/Strafe.cs
|
||||
uploadId: 866910
|
||||
Reference in New Issue
Block a user