Update FishNet

This commit is contained in:
2026-04-07 03:11:52 +07:00
parent 9675b7b31d
commit ba7513d478
869 changed files with 3675 additions and 2764 deletions
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/Attributes.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/Delegates.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/EmptyNetworkBehaviour.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.Callbacks.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.Logging.cs
uploadId: 866910
uploadId: 892096
@@ -19,6 +19,7 @@ using GameKit.Dependencies.Utilities;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using FishNet.Managing.Observing;
using GameKit.Dependencies.Utilities.Types;
using Unity.Profiling;
using UnityEngine;
@@ -139,7 +140,7 @@ namespace FishNet.Object
/* The checked data is greater than
* what was being searched. This means
* to insert right before it. */
if (lTick > tick)
{
result = DataPlacementResult.InsertMiddle;
@@ -226,7 +227,7 @@ namespace FishNet.Object
/// <remarks>This is only used by prediction.</remarks>
private TransformProperties _lastCheckedTransformProperties;
#endregion
/// <summary>
/// Called when the object is destroyed.
/// </summary>
@@ -422,6 +423,10 @@ namespace FishNet.Object
else
writer = CreateRpc(hash, methodWriter, PacketId.Reconcile, rpcChannel);
#if !UNITY_SERVER
int observersWrittenTo = 0;
#endif
// If state forwarding is not enabled then only send to owner.
if (!stateForwarding)
{
@@ -430,15 +435,22 @@ namespace FishNet.Object
// State forwarding, send to all.
else
{
foreach (NetworkConnection nc in Observers)
nc.WriteState(writer);
{
#if !UNITY_SERVER
observersWrittenTo = Observers.Count;
#endif
//Send to everyone unconditionally when not using LOD.
foreach (NetworkConnection nc in Observers)
nc.WriteState(writer);
}
}
#if !UNITY_SERVER
if (_networkTrafficStatistics != null)
{
int written = stateForwarding ? writer.Length * Observers.Count : writer.Length;
_networkTrafficStatistics.AddInboundPacketIdData(PacketId.Reconcile, GetRpcName(PacketId.Reconcile, hash), written + Managing.Transporting.TransportManager.PACKETID_LENGTH, gameObject, asServer: true);
int writtenBytes = stateForwarding ? writer.Length * observersWrittenTo : writer.Length;
_networkTrafficStatistics.AddOutboundPacketIdData(PacketId.Reconcile, GetRpcName(PacketId.Reconcile, hash), writtenBytes + Managing.Transporting.TransportManager.PACKETID_LENGTH, gameObject, asServer: true);
}
#endif
@@ -897,7 +909,9 @@ namespace FishNet.Object
#else
methodWriter.WriteReplicate<T>(replicatesHistory, offset);
#endif
_transportManagerCache.CheckSetReliableChannel(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, ref channel);
channel = _transportManagerCache.GetReliableChannelIfOverMTU(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, channel);
PooledWriter writer = CreateRpc(hash, methodWriter, PacketId.Replicate, channel);
#if !UNITY_SERVER
@@ -912,7 +926,7 @@ namespace FishNet.Object
#if !UNITY_SERVER
written = writer.Length;
#endif
NetworkManager.TransportManager.SendToServer((byte)channel, writer.GetArraySegment(), splitLargeMessages: true);
NetworkManager.TransportManager.SendToServer((byte)channel, writer.GetArraySegment());
}
else
{
@@ -929,7 +943,7 @@ namespace FishNet.Object
#if !UNITY_SERVER
written = writer.Length * (Observers.Count - _networkConnectionCache.Count);
#endif
NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), Observers, _networkConnectionCache, splitLargeMessages: true);
NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), Observers, _networkConnectionCache);
}
}
@@ -1085,7 +1099,7 @@ namespace FishNet.Object
}
#endif
NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), Observers, _networkConnectionCache, false);
NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), Observers, _networkConnectionCache);
methodWriter.StoreLength();
writer.StoreLength();
@@ -1304,10 +1318,6 @@ namespace FishNet.Object
[MakePublic]
internal void Reconcile_Client<T, T2>(ReconcileUserLogicDelegate<T> reconcileDel, RingBuffer<ReplicateDataContainer<T2>> replicatesHistory, RingBuffer<LocalReconcile<T>> reconcilesHistory, T data) where T : IReconcileData where T2 : IReplicateData, new()
{
bool isBehaviourReconciling = IsBehaviourReconciling;
if (!isBehaviourReconciling)
return;
const long unsetHistoryIndex = -1;
long historyIndex = unsetHistoryIndex;
@@ -1341,6 +1351,19 @@ namespace FishNet.Object
uint lrTick = reconcilesHistory[(int)historyIndex].Tick;
if (lrTick != reconcileTick)
historyIndex = unsetHistoryIndex;
//If index is set and behaviour is not reconciling then apply data.
if (!IsBehaviourReconciling && historyIndex != unsetHistoryIndex)
{
LocalReconcile<T> localReconcile = reconcilesHistory[(int)historyIndex];
//Before disposing get the writer and call reconcile reader so it's parsed.
PooledWriter reconcileWritten = localReconcile.Writer;
/* Although this is actually from the local client the datasource is being set to server since server
* is what typically sends reconciles. */
PooledReader reader = ReaderPool.Retrieve(reconcileWritten.GetArraySegment(), _networkObjectCache.NetworkManager, Reader.DataSource.Server);
data = Reconcile_Reader_Local<T>(localReconcile.Tick, reader);
ReaderPool.Store(reader);
}
}
}
@@ -1358,13 +1381,10 @@ namespace FishNet.Object
reconcilesHistory.RemoveRange(true, (int)historyIndex);
}
//If does not have data still then exit method.
//If this behaviour does not have data still then exit method.
if (!IsBehaviourReconciling)
return;
//Set on the networkObject that a reconcile can now occur.
_networkObjectCache.IsObjectReconciling = true;
uint dataTick = data.GetTick();
_lastReconcileTick = dataTick;
@@ -1407,6 +1427,9 @@ namespace FishNet.Object
replicatesHistory.RemoveRange(true, removeCount);
}
//Set on the networkObject that a reconcile can now occur.
_networkObjectCache.IsObjectReconciling = true;
//Call reconcile user logic.
reconcileDel?.Invoke(data, Channel.Reliable);
}
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.Prediction.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.QOL.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.RPCLinks.cs
uploadId: 866910
uploadId: 892096
@@ -113,7 +113,7 @@ namespace FishNet.Object
continue;
tm.SendToClient((byte)Channel.Reliable, bRpc.Writer.GetArraySegment(), conn, true, bRpc.OrderType);
tm.SendToClient((byte)Channel.Reliable, bRpc.Writer.GetArraySegment(), conn, bRpc.OrderType);
}
}
@@ -338,7 +338,7 @@ namespace FishNet.Object
if (!IsSpawnedWithWarning())
return;
_transportManagerCache.CheckSetReliableChannel(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, ref channel);
channel = _transportManagerCache.GetReliableChannelIfOverMTU(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, channel);
PooledWriter writer = CreateRpc(hash, methodWriter, PacketId.ServerRpc, channel);
@@ -347,7 +347,7 @@ namespace FishNet.Object
_networkTrafficStatistics.AddOutboundPacketIdData(PacketId.ServerRpc, GetRpcName(PacketId.ServerRpc, hash), writer.Length, gameObject, asServer: false);
#endif
_networkObjectCache.NetworkManager.TransportManager.SendToServer((byte)channel, writer.GetArraySegment(), true, orderType);
_networkObjectCache.NetworkManager.TransportManager.SendToServer((byte)channel, writer.GetArraySegment(), orderType);
writer.StoreLength();
}
@@ -364,12 +364,12 @@ namespace FishNet.Object
if (!IsSpawnedWithWarning())
return;
_transportManagerCache.CheckSetReliableChannel(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, ref channel);
channel = _transportManagerCache.GetReliableChannelIfOverMTU(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, channel);
PooledWriter writer = lCreateRpc(channel);
SetNetworkConnectionCache(excludeServer, excludeOwner);
_networkObjectCache.NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), _networkObjectCache.Observers, _networkConnectionCache, true, orderType);
_networkObjectCache.NetworkManager.TransportManager.SendToClients((byte)channel, writer.GetArraySegment(), _networkObjectCache.Observers, _networkConnectionCache, orderType);
/* If buffered then dispose of any already buffered
* writers and replace with new one. Writers should
@@ -428,7 +428,7 @@ namespace FishNet.Object
if (!IsSpawnedWithWarning())
return;
_transportManagerCache.CheckSetReliableChannel(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, ref channel);
channel = _transportManagerCache.GetReliableChannelIfOverMTU(methodWriter.Length + MAXIMUM_RPC_HEADER_SIZE, channel);
if (validateTarget)
{
@@ -468,7 +468,8 @@ namespace FishNet.Object
_networkTrafficStatistics.AddOutboundPacketIdData(PacketId.TargetRpc, GetRpcName(PacketId.TargetRpc, hash), writer.Length, gameObject, asServer: true);
#endif
_networkObjectCache.NetworkManager.TransportManager.SendToClient((byte)channel, writer.GetArraySegment(), target, true, orderType);
_networkObjectCache.NetworkManager.TransportManager.SendToClient((byte)channel, writer.GetArraySegment(), target, orderType);
writer.Store();
}
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.RPCs.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.SyncTypes.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/NetworkBehaviour.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/RpcLinkType.cs
uploadId: 866910
uploadId: 892096
@@ -13,6 +13,6 @@ AssetOrigin:
serializedVersion: 1
productId: 207815
packageName: 'FishNet: Networking Evolved'
packageVersion: 4.6.22R
packageVersion: 4.7.1R
assetPath: Assets/FishNet/Runtime/Object/NetworkBehaviour/SyncTypeWriteType.cs
uploadId: 866910
uploadId: 892096