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_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_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 685148375}
m_Father: {fileID: 1886023632} m_Father: {fileID: 1886023632}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &310045873 stripped --- !u!1 &310045873 stripped
@@ -3687,6 +3688,37 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 9086668275070771076, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3} m_CorrespondingSourceObject: {fileID: 9086668275070771076, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
m_PrefabInstance: {fileID: 7528894854307259292} m_PrefabInstance: {fileID: 7528894854307259292}
m_PrefabAsset: {fileID: 0} 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 --- !u!1 &689152543
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -4161,7 +4193,7 @@ MonoBehaviour:
networkManagers: networkManagers:
- {fileID: 811840793} - {fileID: 811840793}
- {fileID: 65516626} - {fileID: 65516626}
interval: 0 interval: 0.3
ownerIndex: 0 ownerIndex: 0
--- !u!114 &805005474 --- !u!114 &805005474
MonoBehaviour: MonoBehaviour:
@@ -6225,7 +6257,8 @@ MonoBehaviour:
root: {fileID: 0} root: {fileID: 0}
delay: 50 delay: 50
maxEventSendTries: 3 maxEventSendTries: 3
pingDelay: 15 sendingPingDelay: 15
syncingPingDelay: 300
tickDelta: 0.016666668 tickDelta: 0.016666668
debugOutput: {fileID: 0} debugOutput: {fileID: 0}
DebugImageToIndicateOwner: {fileID: 1745114900} DebugImageToIndicateOwner: {fileID: 1745114900}
@@ -6478,7 +6511,7 @@ PrefabInstance:
objectReference: {fileID: 776794315963647603, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3} objectReference: {fileID: 776794315963647603, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3} - target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: delay propertyPath: delay
value: 1 value: 30
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3} - target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: debugOutput propertyPath: debugOutput
@@ -14267,6 +14300,10 @@ PrefabInstance:
propertyPath: serializationData.Prefab propertyPath: serializationData.Prefab
value: value:
objectReference: {fileID: 776794315963647603, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3} 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} - target: {fileID: 795751881681854794, guid: 15ac0ed4c56c7784ea3ae9000fc2af1f, type: 3}
propertyPath: serializationData.Prefab propertyPath: serializationData.Prefab
value: value:
File diff suppressed because it is too large Load Diff
+20 -12
View File
@@ -102,7 +102,13 @@ namespace Marro.PacManUdon
/// </summary> /// </summary>
private const ushort HeaderLength = 8; 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; private const ushort GuidSize = 16;
/// <summary>
/// The total size of the Reset event.
/// </summary>
private const ushort ResetEventSize = HeaderTimestampIndex + GuidSize; private const ushort ResetEventSize = HeaderTimestampIndex + GuidSize;
#endregion #endregion
@@ -157,6 +163,9 @@ namespace Marro.PacManUdon
/// </summary> /// </summary>
private int retriesWithoutSuccess; private int retriesWithoutSuccess;
/// <summary>
/// The data of the last aknowledged Reset event.
/// </summary>
private byte[] lastResetEventData; private byte[] lastResetEventData;
/// <summary> /// <summary>
@@ -760,7 +769,7 @@ namespace Marro.PacManUdon
return; // Nothing to store 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; var length = networkedData.Length;
int index = 0; int index = 0;
@@ -798,9 +807,8 @@ namespace Marro.PacManUdon
var @event = GetArrayPart(networkedData, index, eventSize); var @event = GetArrayPart(networkedData, index, eventSize);
if (isReset) if (isReset && TryApplyReset(@event))
{ {
TryApplyReset(@event);
return; return;
} }
@@ -844,7 +852,7 @@ namespace Marro.PacManUdon
} }
else else
{ {
return; continue; // Event is currently not relevant
} }
lastEventId = eventId; lastEventId = eventId;
@@ -863,23 +871,23 @@ namespace Marro.PacManUdon
hasFullSyncReady = true; 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 // Compare the guid to the one in the previous reset event
if (IsDuplicateResetEvent(@event)) if (IsDuplicateResetEvent(@event))
{ {
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Rejected Reset event as it was a duplicate."); 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!"); Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Applied Reset event!");
lastResetEventData = @event; lastResetEventData = @event;
ClearBuffer(); Reset();
SetSynced(false); return true;
} }
private bool IsDuplicateResetEvent(byte[] @event) private bool IsDuplicateResetEvent(byte[] @event)
@@ -903,7 +911,6 @@ namespace Marro.PacManUdon
{ {
Synced = false; Synced = false;
RequestEvent(NetworkEventType.FullSync); RequestEvent(NetworkEventType.FullSync);
lastEventTransmissionTime = SyncedTimeTicks;
} }
} }
@@ -973,7 +980,7 @@ namespace Marro.PacManUdon
return false; 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! retriesWithoutSuccess = 0; // We had success!
@@ -998,6 +1005,7 @@ namespace Marro.PacManUdon
eventsQueueIndex = 0; eventsQueueIndex = 0;
lastEventId = 0; lastEventId = 0;
hasFullSyncReady = false; hasFullSyncReady = false;
lastEventTransmissionTime = SyncedTimeTicks;
eventTransmissionHistory = new int[maxEventSendTries]; eventTransmissionHistory = new int[maxEventSendTries];
eventTransmissionHistoryIndex = 0; eventTransmissionHistoryIndex = 0;
@@ -1089,7 +1097,7 @@ namespace Marro.PacManUdon
if (nextEventTime < SyncedTimeTicks) 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); HandleError(true);
return; return;
} }
@@ -69,6 +69,10 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
var equal = true; var equal = true;
var positions1 = positionCaptures[index]; var positions1 = positionCaptures[index];
if (positions1 == null)
{
return false;
}
var positions2 = GetPositions(gridMovers2); var positions2 = GetPositions(gridMovers2);
for (int i = 0; i < positions1.Length; i++) for (int i = 0; i < positions1.Length; i++)
{ {