[Add] FishNet

This commit is contained in:
2026-03-30 20:11:57 +07:00
parent ee793a3361
commit c22c08753a
1797 changed files with 197950 additions and 1 deletions
@@ -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();
}
}
@@ -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;
}
}
}
@@ -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