Fixed networking bugs

This commit is contained in:
2026-06-24 18:58:19 +02:00
parent 8255eb8b99
commit 42f9e2ee9d
4 changed files with 877 additions and 829 deletions
+41 -4
View File
@@ -1324,7 +1324,8 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 685148375}
m_Father: {fileID: 1886023632}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &310045873 stripped
@@ -3687,6 +3688,37 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 9086668275070771076, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
m_PrefabInstance: {fileID: 7528894854307259292}
m_PrefabAsset: {fileID: 0}
--- !u!1 &685148374
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 685148375}
m_Layer: 0
m_Name: Make networkmanager visible
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &685148375
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 685148374}
serializedVersion: 2
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: 297676220}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &689152543
GameObject:
m_ObjectHideFlags: 0
@@ -4161,7 +4193,7 @@ MonoBehaviour:
networkManagers:
- {fileID: 811840793}
- {fileID: 65516626}
interval: 0
interval: 0.3
ownerIndex: 0
--- !u!114 &805005474
MonoBehaviour:
@@ -6225,7 +6257,8 @@ MonoBehaviour:
root: {fileID: 0}
delay: 50
maxEventSendTries: 3
pingDelay: 15
sendingPingDelay: 15
syncingPingDelay: 300
tickDelta: 0.016666668
debugOutput: {fileID: 0}
DebugImageToIndicateOwner: {fileID: 1745114900}
@@ -6478,7 +6511,7 @@ PrefabInstance:
objectReference: {fileID: 776794315963647603, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: delay
value: 1
value: 30
objectReference: {fileID: 0}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: debugOutput
@@ -14267,6 +14300,10 @@ PrefabInstance:
propertyPath: serializationData.Prefab
value:
objectReference: {fileID: 776794315963647603, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: delay
value: 30
objectReference: {fileID: 0}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: serializationData.Prefab
value:
File diff suppressed because it is too large Load Diff
+20 -12
View File
@@ -102,7 +102,13 @@ namespace Marro.PacManUdon
/// </summary>
private const ushort HeaderLength = 8;
/// <summary>
/// The size of a GUID as used in the Reset event, in bytes.
/// </summary>
private const ushort GuidSize = 16;
/// <summary>
/// The total size of the Reset event.
/// </summary>
private const ushort ResetEventSize = HeaderTimestampIndex + GuidSize;
#endregion
@@ -157,6 +163,9 @@ namespace Marro.PacManUdon
/// </summary>
private int retriesWithoutSuccess;
/// <summary>
/// The data of the last aknowledged Reset event.
/// </summary>
private byte[] lastResetEventData;
/// <summary>
@@ -760,7 +769,7 @@ namespace Marro.PacManUdon
return; // Nothing to store
}
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Received {networkedData.Length} bytes!\nBytes received:\n{ArrayToString(networkedData)}");
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Received {networkedData.Length} bytes!\nBytes received:\n{ArrayToString(networkedData)}");
var length = networkedData.Length;
int index = 0;
@@ -798,9 +807,8 @@ namespace Marro.PacManUdon
var @event = GetArrayPart(networkedData, index, eventSize);
if (isReset)
if (isReset && TryApplyReset(@event))
{
TryApplyReset(@event);
return;
}
@@ -844,7 +852,7 @@ namespace Marro.PacManUdon
}
else
{
return;
continue; // Event is currently not relevant
}
lastEventId = eventId;
@@ -863,23 +871,23 @@ namespace Marro.PacManUdon
hasFullSyncReady = true;
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Queued full sync in buffer, should execute at {nextEventTime}.");
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Queued full sync in buffer, current time is {SyncedTimeTicks}, should execute at {nextEventTime}.");
}
private void TryApplyReset(byte[] @event)
private bool TryApplyReset(byte[] @event)
{
// Compare the guid to the one in the previous reset event
if (IsDuplicateResetEvent(@event))
{
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Rejected Reset event as it was a duplicate.");
return;
return false;
}
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Applied Reset event!");
lastResetEventData = @event;
ClearBuffer();
SetSynced(false);
Reset();
return true;
}
private bool IsDuplicateResetEvent(byte[] @event)
@@ -903,7 +911,6 @@ namespace Marro.PacManUdon
{
Synced = false;
RequestEvent(NetworkEventType.FullSync);
lastEventTransmissionTime = SyncedTimeTicks;
}
}
@@ -973,7 +980,7 @@ namespace Marro.PacManUdon
return false;
}
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Performed incoming event of type {eventType}! Total {index} bytes.");
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Performed incoming event of type {eventType}! Total {index} bytes.");
retriesWithoutSuccess = 0; // We had success!
@@ -998,6 +1005,7 @@ namespace Marro.PacManUdon
eventsQueueIndex = 0;
lastEventId = 0;
hasFullSyncReady = false;
lastEventTransmissionTime = SyncedTimeTicks;
eventTransmissionHistory = new int[maxEventSendTries];
eventTransmissionHistoryIndex = 0;
@@ -1089,7 +1097,7 @@ namespace Marro.PacManUdon
if (nextEventTime < SyncedTimeTicks)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) New event timestamp is earlier than our current synced time by {SyncedTime - nextEventTime} seconds! nextEventTime: {nextEventTime} SyncedTime: {SyncedTime}, internalTime: {targetTicks}");
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) New event timestamp is earlier than our current synced time by {SyncedTimeTicks - nextEventTime}! nextEventTime: {nextEventTime} SyncedTime: {SyncedTimeTicks}, targetTicks: {targetTicks}");
HandleError(true);
return;
}
@@ -69,6 +69,10 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
var equal = true;
var positions1 = positionCaptures[index];
if (positions1 == null)
{
return false;
}
var positions2 = GetPositions(gridMovers2);
for (int i = 0; i < positions1.Length; i++)
{