Tools for testing

This commit is contained in:
2026-06-11 19:24:09 +02:00
parent 878486c92f
commit 2ccf77c0eb
6 changed files with 1590 additions and 376 deletions

View File

@@ -10184,17 +10184,11 @@ MonoBehaviour:
SerializationNodes: []
_udonSharpBackingUdonBehaviour: {fileID: 1180286844452673728}
networkManager: {fileID: 0}
networkEventSubscribersFlat:
- {fileID: 7714172614521704433}
- {fileID: 7714172614521704433}
- {fileID: 7714172614521704433}
- {fileID: 7714172614521704433}
networkEventSubscribersFlatSegmentLengths: 000000000000000003000000ffffffff000000000000000000000000000000000000000000000000
root: {fileID: 6505452106475299050}
delay: 1
delay: 50
maxEventSendTries: 3
pingDelay: 0.3
updateDelta: 0.016666668
pingDelay: 15
tickDelta: 0.016666668
DebugImageToIndicateOwner: {fileID: 3129450115522694373}
DebugImageToIndicateSynced: {fileID: 762605392980976710}
DebugImageToIndicateReady: {fileID: 1191965255371285111}

File diff suppressed because it is too large Load Diff

View File

@@ -181,7 +181,7 @@ MonoBehaviour:
Data: 11|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Single, mscorlib
Data: System.Int32, mscorlib
- Name:
Entry: 8
Data:
@@ -237,17 +237,11 @@ MonoBehaviour:
Entry: 1
Data: maxEventSendTries
- Name: <UserType>k__BackingField
Entry: 7
Data: 15|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Int32, mscorlib
- Name:
Entry: 8
Data:
Entry: 9
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -262,13 +256,13 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 16|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 17|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 16|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@@ -292,7 +286,7 @@ MonoBehaviour:
Data: pingDelay
- Name: $v
Entry: 7
Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 17|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: pingDelay
@@ -316,13 +310,13 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 20|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 19|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@@ -343,19 +337,25 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: updateDelta
Data: tickDelta
- Name: $v
Entry: 7
Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: updateDelta
Data: tickDelta
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
Entry: 7
Data: 21|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Single, mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
Data: 21
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -625,19 +625,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: offsetTime
Data: startTime
- Name: $v
Entry: 7
Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: offsetTime
Data: startTime
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
Data: 21
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
Data: 21
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -673,13 +673,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: internalTime
Data: targetTicks
- Name: $v
Entry: 7
Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: internalTime
Data: targetTicks
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
@@ -817,13 +817,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: nextUpdateTime
Data: nextEventTime
- Name: $v
Entry: 7
Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: nextUpdateTime
Data: nextEventTime
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
@@ -865,13 +865,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: nextEventTime
Data: retriesWithoutSuccess
- Name: $v
Entry: 7
Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: nextEventTime
Data: retriesWithoutSuccess
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
@@ -913,19 +913,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: retriesWithoutSuccess
Data: hasFullSyncReady
- Name: $v
Entry: 7
Data: 50|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: retriesWithoutSuccess
Data: hasFullSyncReady
- Name: <UserType>k__BackingField
Entry: 9
Data: 15
Data: 25
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 25
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -961,13 +961,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: hasFullSyncReady
Data: serializationRequested
- Name: $v
Entry: 7
Data: 52|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: hasFullSyncReady
Data: serializationRequested
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
@@ -1009,19 +1009,25 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: serializationRequested
Data: eventsToSend
- Name: $v
Entry: 7
Data: 54|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: serializationRequested
Data: eventsToSend
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
Entry: 7
Data: 55|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: Marro.PacManUdon.NetworkEventType[], Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 25
Data: 32
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1036,7 +1042,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 55|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 56|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -1057,25 +1063,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventsToSend
Data: eventsToSendIndex
- Name: $v
Entry: 7
Data: 56|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 57|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventsToSend
Data: eventsToSendIndex
- Name: <UserType>k__BackingField
Entry: 7
Data: 57|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: Marro.PacManUdon.NetworkEventType[], Assembly-CSharp
- Name:
Entry: 8
Data:
Entry: 9
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1111,19 +1111,25 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventsToSendIndex
Data: eventsQueue
- Name: $v
Entry: 7
Data: 59|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventsToSendIndex
Data: eventsQueue
- Name: <UserType>k__BackingField
Entry: 9
Data: 15
Entry: 7
Data: 60|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Byte[][], mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 29
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1138,7 +1144,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 60|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 61|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -1159,25 +1165,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventsQueue
Data: eventsQueueIndex
- Name: $v
Entry: 7
Data: 61|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 62|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventsQueue
Data: eventsQueueIndex
- Name: <UserType>k__BackingField
Entry: 7
Data: 62|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Byte[][], mscorlib
- Name:
Entry: 8
Data:
Entry: 9
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 29
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1213,19 +1213,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventsQueueIndex
Data: eventsQueueIndexAtLastTransmission
- Name: $v
Entry: 7
Data: 64|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventsQueueIndex
Data: eventsQueueIndexAtLastTransmission
- Name: <UserType>k__BackingField
Entry: 9
Data: 15
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1261,19 +1261,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventsQueueIndexAtLastTransmission
Data: eventTransmissionHistory
- Name: $v
Entry: 7
Data: 66|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventsQueueIndexAtLastTransmission
Data: eventTransmissionHistory
- Name: <UserType>k__BackingField
Entry: 9
Data: 15
Data: 32
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 32
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1309,19 +1309,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventTransmissionHistory
Data: eventTransmissionHistoryIndex
- Name: $v
Entry: 7
Data: 68|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventTransmissionHistory
Data: eventTransmissionHistoryIndex
- Name: <UserType>k__BackingField
Entry: 9
Data: 32
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 32
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1357,19 +1357,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: eventTransmissionHistoryIndex
Data: lastEventTransmissionTime
- Name: $v
Entry: 7
Data: 70|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: eventTransmissionHistoryIndex
Data: lastEventTransmissionTime
- Name: <UserType>k__BackingField
Entry: 9
Data: 15
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 15
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1405,64 +1405,16 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: lastEventTransmissionTime
Data: lastEventId
- Name: $v
Entry: 7
Data: 72|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: lastEventTransmissionTime
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 73|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: lastEventId
- Name: $v
Entry: 7
Data: 74|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: lastEventId
- Name: <UserType>k__BackingField
Entry: 7
Data: 75|System.RuntimeType, mscorlib
Data: 73|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Byte, mscorlib
@@ -1471,7 +1423,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 75
Data: 73
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1486,7 +1438,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 76|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 74|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -1510,13 +1462,13 @@ MonoBehaviour:
Data: networkedData
- Name: $v
Entry: 7
Data: 77|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 75|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: networkedData
- Name: <UserType>k__BackingField
Entry: 7
Data: 78|System.RuntimeType, mscorlib
Data: 76|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Byte[], mscorlib
@@ -1525,7 +1477,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 78
Data: 76
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1540,13 +1492,13 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 79|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 77|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 80|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
Data: 78|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
- Name:
Entry: 8
Data:
@@ -1570,7 +1522,7 @@ MonoBehaviour:
Data: ready
- Name: $v
Entry: 7
Data: 81|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 79|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: ready
@@ -1592,6 +1544,54 @@ MonoBehaviour:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 80|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: synced
- Name: $v
Entry: 7
Data: 81|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: synced
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
- Name: <SystemType>k__BackingField
Entry: 9
Data: 25
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 82|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -1615,19 +1615,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: synced
Data: <SyncedTimeTicks>k__BackingField
- Name: $v
Entry: 7
Data: 83|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: synced
Data: <SyncedTimeTicks>k__BackingField
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
Data: 11
- Name: <SystemType>k__BackingField
Entry: 9
Data: 25
Data: 11
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1672,10 +1672,10 @@ MonoBehaviour:
Data: <SyncedTime>k__BackingField
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
Data: 21
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
Data: 21
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1711,19 +1711,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: <SyncedDeltaTime>k__BackingField
Data: <IsEventUpdate>k__BackingField
- Name: $v
Entry: 7
Data: 87|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: <SyncedDeltaTime>k__BackingField
Data: <IsEventUpdate>k__BackingField
- Name: <UserType>k__BackingField
Entry: 9
Data: 11
Data: 25
- Name: <SystemType>k__BackingField
Entry: 9
Data: 11
Data: 25
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1759,13 +1759,13 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: <IsEventUpdate>k__BackingField
Data: isOwner
- Name: $v
Entry: 7
Data: 89|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: <IsEventUpdate>k__BackingField
Data: isOwner
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
@@ -1807,19 +1807,25 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: isOwner
Data: debugOutput
- Name: $v
Entry: 7
Data: 91|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: isOwner
Data: debugOutput
- Name: <UserType>k__BackingField
Entry: 9
Data: 25
Entry: 7
Data: 92|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: TMPro.TMP_InputField, Unity.TextMeshPro
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 25
Data: 92
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1831,13 +1837,19 @@ MonoBehaviour:
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 92|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 93|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
Data: 1
- Name:
Entry: 7
Data: 94|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
@@ -1858,13 +1870,13 @@ MonoBehaviour:
Data: DebugImageToIndicateOwner
- Name: $v
Entry: 7
Data: 93|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 95|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: DebugImageToIndicateOwner
- Name: <UserType>k__BackingField
Entry: 7
Data: 94|System.RuntimeType, mscorlib
Data: 96|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Animator, UnityEngine.AnimationModule
@@ -1873,7 +1885,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 94
Data: 96
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1888,13 +1900,13 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 95|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 97|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 96|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 98|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@@ -1918,16 +1930,16 @@ MonoBehaviour:
Data: DebugImageToIndicateSynced
- Name: $v
Entry: 7
Data: 97|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 99|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: DebugImageToIndicateSynced
- Name: <UserType>k__BackingField
Entry: 9
Data: 94
Data: 96
- Name: <SystemType>k__BackingField
Entry: 9
Data: 94
Data: 96
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -1942,68 +1954,69 @@ MonoBehaviour:
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 98|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 99|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: DebugImageToIndicateReady
- Name: $v
Entry: 7
Data: 100|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: DebugImageToIndicateReady
- Name: <UserType>k__BackingField
Entry: 9
Data: 94
- Name: <SystemType>k__BackingField
Entry: 9
Data: 94
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 101|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
Data: 100|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 102|UnityEngine.SerializeField, UnityEngine.CoreModule
Data: 101|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: DebugImageToIndicateReady
- Name: $v
Entry: 7
Data: 102|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: DebugImageToIndicateReady
- Name: <UserType>k__BackingField
Entry: 9
Data: 96
- Name: <SystemType>k__BackingField
Entry: 9
Data: 96
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 103|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 104|UnityEngine.SerializeField, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@@ -2027,13 +2040,13 @@ MonoBehaviour:
Data: tester
- Name: $v
Entry: 7
Data: 103|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Data: 105|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: tester
- Name: <UserType>k__BackingField
Entry: 7
Data: 104|System.RuntimeType, mscorlib
Data: 106|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: NetworkManagerTester, Assembly-CSharp
@@ -2057,7 +2070,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 105|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
Data: 107|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
mscorlib
- Name:
Entry: 12

View File

@@ -1,4 +1,6 @@
using System;
using Newtonsoft.Json.Linq;
using System;
using System.Numerics;
using System.Text;
using TMPro;
using UdonSharp;
@@ -52,9 +54,9 @@ namespace Marro.PacManUdon
/// </summary>
[SerializeField] private GameObject root;
/// <summary>
/// The delay at which the receiving side replays events.
/// The delay in ticks at which the receiving side replays events.
/// </summary>
[SerializeField] private float delay = 1f;
[SerializeField] private int delay = 50;
/// <summary>
/// The maximum amount of times a message is sent.
/// </summary>
@@ -62,11 +64,11 @@ namespace Marro.PacManUdon
/// <summary>
/// How long to wait since last message to send next ping.
/// </summary>
[SerializeField] private float pingDelay = 0.3f;
[SerializeField] private int pingDelay = 15;
/// <summary>
/// The time delta at which updates occur.
/// </summary>
[SerializeField] private float updateDelta = 0.0166666667f;
[SerializeField] private float tickDelta = 0.0166666667f;
#endregion
#region Constants
@@ -123,13 +125,14 @@ namespace Marro.PacManUdon
private SyncedObject[] syncedUpdateSubscribers;
/// <summary>
/// Offset from system time to network time, including delay.
/// The <see cref="Time.fixedTime"/> that corresponds to tick 0.
/// </summary>
private float offsetTime;
private float startTime;
/// <summary>
/// Time since last full sync, captured when this FixedUpdate started, with network delay applied.
/// Time in ticks since start of game.
/// </summary>
private float internalTime;
private int targetTicks;
/// <summary>
/// True if time is paused
@@ -142,13 +145,9 @@ namespace Marro.PacManUdon
private bool stepNext;
/// <summary>
/// Time at which the next update should occur.
/// Time at which next received event occured, in ticks.
/// </summary>
private float nextUpdateTime;
/// <summary>
/// Time at which next received event occured.
/// </summary>
private float nextEventTime;
private int nextEventTime;
/// <summary>
/// Amounot of retries in a row without a successful sync.
@@ -196,9 +195,9 @@ namespace Marro.PacManUdon
/// </summary>
private int eventTransmissionHistoryIndex;
/// <summary>
/// Time of last event transmission.
/// Time of last event transmission, in ticks.
/// </summary>
private float lastEventTransmissionTime;
private int lastEventTransmissionTime;
/// <summary>
@@ -251,14 +250,18 @@ namespace Marro.PacManUdon
private bool synced = false;
/// <summary>
/// The time since last full sync which is currently being simulated.
/// The time since start of game, in ticks.
/// </summary>
public int SyncedTimeTicks { get; private set; }
/// <summary>
/// The time since start of game which is currently being simulated.
/// </summary>
public float SyncedTime { get; private set; }
/// <summary>
/// Time since the last simulation, in seconds.
/// </summary>
public float SyncedDeltaTime { get; private set; }
public float SyncedDeltaTime => tickDelta;
/// <summary>
/// Is the current simulation to prepare for applying a network event?
@@ -355,11 +358,10 @@ namespace Marro.PacManUdon
retriesWithoutSuccess = 0;
hasFullSyncReady = false;
offsetTime = Time.fixedTime;
internalTime = 0;
targetTicks = 0;
startTime = Time.fixedTime;
SyncedTime = 0;
SyncedDeltaTime = Time.fixedDeltaTime;
nextUpdateTime = SyncedTime;
SyncedTimeTicks = 0;
Ready = true;
@@ -373,11 +375,16 @@ namespace Marro.PacManUdon
RequestEvent(NetworkEventType.FullSync);
}
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Initialized, time offset: {offsetTime}");
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Initialized");
}
public void Update()
{
if (debugOutput != null)
{
WriteDebugOutput(debugOutput);
}
if (!initialized)
{
return;
@@ -387,35 +394,12 @@ namespace Marro.PacManUdon
UpdateInternalTime();
// Forwards simulated time by updateDelta until we're caught up
while (nextUpdateTime <= internalTime)
while (SyncedTimeTicks <= targetTicks)
{
PerformFixedSyncedUpdate();
}
}
private void UpdateInternalTime()
{
var delta = Time.fixedTime - offsetTime - internalTime;
if (!paused)
{
// Continue time like normal
internalTime += delta;
}
else if (paused && !stepNext)
{
// Since we're paused, increase our offset from Unity's time
offsetTime += delta;
}
else
{
// Step forward by exactly updateDelta, apply the remainder to our offset
offsetTime += delta - updateDelta;
internalTime += updateDelta;
stepNext = false;
}
}
private void PerformFixedSyncedUpdate()
{
if (Ready)
@@ -431,9 +415,8 @@ namespace Marro.PacManUdon
}
}
ProgressSyncedTime(nextUpdateTime);
ProgressSyncedTime();
CallSyncedUpdate();
nextUpdateTime = SyncedTime + updateDelta;
}
private void CallSyncedUpdate()
@@ -555,7 +538,7 @@ namespace Marro.PacManUdon
return;
}
var timestamp = SyncedTime;
var timestamp = SyncedTimeTicks;
var eventId = GetNextEventId(lastEventId);
@@ -593,7 +576,7 @@ namespace Marro.PacManUdon
retriesWithoutSuccess = 0; // We had success!
}
private static void InitializeEvent(NetworkEventType eventType, float timestamp, byte eventId, out byte[] data, out int index)
private static void InitializeEvent(NetworkEventType eventType, int timestamp, byte eventId, out byte[] data, out int index)
{
data = new byte[MaxEventSize];
@@ -640,7 +623,7 @@ namespace Marro.PacManUdon
private void ProgressPingTime()
{
if (eventsQueueIndex > 0 && !serializationRequested
&& internalTime - lastEventTransmissionTime >= pingDelay)
&& targetTicks - lastEventTransmissionTime >= pingDelay)
{
RequestSerializationForEvents();
}
@@ -695,7 +678,7 @@ namespace Marro.PacManUdon
// If there was a full sync in the queue, it has now been transmitted at least once
hasFullSyncReady = false;
lastEventTransmissionTime = internalTime;
lastEventTransmissionTime = targetTicks;
}
#endregion
@@ -811,7 +794,7 @@ namespace Marro.PacManUdon
QueueEventInBuffer(@event);
// Set this event to play after the default delay
nextEventTime = internalTime + delay;
nextEventTime = targetTicks + delay;
hasFullSyncReady = true;
@@ -822,7 +805,7 @@ namespace Marro.PacManUdon
{
IsEventUpdate = true;
while (eventsQueueIndex > 0 && nextEventTime <= SyncedTime)
while (eventsQueueIndex > 0 && nextEventTime <= SyncedTimeTicks)
{
var success = ApplyEvent(eventsQueue[0]);
@@ -847,11 +830,16 @@ namespace Marro.PacManUdon
{
SyncToTimestamp(timestamp);
}
else if (timestamp < SyncedTimeTicks)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Next received event is in the past! " +
$"{nameof(nextEventTime)}: {nextEventTime} < {nameof(SyncedTimeTicks)}: {SyncedTimeTicks}.");
HandleError(true);
return false;
}
var index = (int)HeaderLength; // Skip header
ProgressSyncedTime(timestamp);
var subscribers = GetEventSubscribers(eventType);
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) ApplyEvent with dt {SyncedDeltaTime}");
@@ -951,30 +939,38 @@ namespace Marro.PacManUdon
#endregion
#region Time
private void ProgressSyncedTime(float newTime)
private void UpdateInternalTime()
{
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) updating SyncedTime from {SyncedTime} to {newTime}");
SyncedDeltaTime = newTime - SyncedTime;
if (SyncedDeltaTime < 0)
if (paused && !stepNext)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Negative Dt: {SyncedDeltaTime}! Going from {SyncedTime} to {newTime}, IsEventUpdate: {IsEventUpdate}");
return;
}
SyncedTime = newTime;
if (paused && stepNext)
{
targetTicks++;
stepNext = false;
return;
}
private void SyncToTimestamp(float timestamp)
targetTicks = (int)((Time.fixedTime - startTime) / tickDelta);
}
private void ProgressSyncedTime()
{
var oldOffset = offsetTime;
offsetTime = Time.fixedTime - timestamp;
SyncedTimeTicks++;
SyncedTime = SyncedTimeTicks * tickDelta;
}
var delta = offsetTime - oldOffset;
internalTime -= delta;
SyncedTime -= delta;
nextEventTime -= delta;
private void SyncToTimestamp(int timestamp)
{
startTime = Time.fixedTime - timestamp * tickDelta;
targetTicks = timestamp;
SyncedTimeTicks = timestamp;
SyncedTime = SyncedTimeTicks * tickDelta;
nextEventTime = timestamp;
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Synced to timestamp {timestamp}, current time is {Time.fixedTime}, offsetTime is now {offsetTime}, internalTime is now {internalTime}, SyncedTime is now {SyncedTime}, nextEventTime is now {nextEventTime}");
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Synced to timestamp {timestamp}, internalTime is now {targetTicks}, SyncedTime is now {SyncedTime}, nextEventTime is now {nextEventTime}");
}
private void UpdateNextEventTime()
@@ -993,9 +989,9 @@ namespace Marro.PacManUdon
return;
}
if (nextEventTime < SyncedTime)
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: {internalTime}");
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}");
HandleError(true);
return;
}
@@ -1026,8 +1022,8 @@ namespace Marro.PacManUdon
private static NetworkEventType GetEventTypeFromHeader(byte[] @event, int eventIndex = 0) =>
(NetworkEventType)@event[eventIndex + HeaderEventTypeIndex];
private static float GetTimestampFromHeader(byte[] @event, int eventIndex = 0) =>
BitConverter.ToSingle(@event, eventIndex + HeaderTimestampIndex);
private static int GetTimestampFromHeader(byte[] @event, int eventIndex = 0) =>
BitConverter.ToInt32(@event, eventIndex + HeaderTimestampIndex);
private static byte GetEventIdFromHeader(byte[] @event, int eventIndex = 0) =>
@event[eventIndex + HeaderEventIdIndex];
@@ -1107,6 +1103,11 @@ namespace Marro.PacManUdon
Array.Copy(data, start, result, 0, length);
return result;
}
private static float RoundDown(float value, float precision)
{
return (float)(Math.Floor(value / precision) * precision);
}
#endregion
#region SyncedData
@@ -1137,20 +1138,20 @@ namespace Marro.PacManUdon
#region Debug
public void SimulateSyncToTimestamp(float timestamp)
{
SyncToTimestamp(timestamp);
//SyncToTimestamp(timestamp);
}
public void WriteDebugOutput(TMP_InputField debugOutput)
{
debugOutput.text += $"{nameof(NetworkManager)}:\n" +
debugOutput.text = $"{nameof(NetworkManager)}:\n" +
$"IsOwner: {IsOwner}\n" +
$"Ready: {Ready}\n" +
$"Synced: {Synced}\n" +
$"hasFullSyncReady: {hasFullSyncReady}\n" +
$"lastEventId: {lastEventId}" +
$"lastEventId: {lastEventId}\n" +
$"Time.fixedTime: {Time.fixedTime}\n" +
$"offsetTime: {offsetTime}\n" +
$"internalTime: {internalTime}\n" +
$"startTime: {startTime}\n" +
$"targetTicks: {targetTicks}\n" +
$"SyncedTime: {SyncedTime}\n" +
$"Dt: {SyncedDeltaTime}\n" +
$"BufferIndex: {eventsQueueIndex}\n" +
@@ -1158,6 +1159,11 @@ namespace Marro.PacManUdon
$"\n";
}
/// <summary>
/// Text field to display debug info in.
/// </summary>
[SerializeField] private TMP_InputField debugOutput;
/// <summary>
/// An animator which visualizes whether the current perspective is the owner.
/// </summary>

View File

@@ -43,7 +43,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 7
Data: 10
- Name:
Entry: 7
Data:
@@ -349,19 +349,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: captureTime
Data: captureTimes
- Name: $v
Entry: 7
Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: captureTime
Data: captureTimes
- Name: <UserType>k__BackingField
Entry: 7
Data: 23|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Single, mscorlib
Data: System.Int32[], mscorlib
- Name:
Entry: 8
Data:
@@ -403,25 +403,31 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
Data: positions
Data: positionCaptures
- Name: $v
Entry: 7
Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: positions
Data: positionCaptures
- Name: <UserType>k__BackingField
Entry: 7
Data: 26|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Vector2[], UnityEngine.CoreModule
Data: UnityEngine.Vector2[][], UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 26
Entry: 7
Data: 27|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Object[], mscorlib
- Name:
Entry: 8
Data:
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -436,7 +442,157 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: ownerIndex
- Name: $v
Entry: 7
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: ownerIndex
- Name: <UserType>k__BackingField
Entry: 7
Data: 30|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Int32, mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 30
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: remoteIndex
- Name: $v
Entry: 7
Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: remoteIndex
- Name: <UserType>k__BackingField
Entry: 9
Data: 30
- Name: <SystemType>k__BackingField
Entry: 9
Data: 30
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: previousCaptureTime
- Name: $v
Entry: 7
Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: previousCaptureTime
- Name: <UserType>k__BackingField
Entry: 9
Data: 30
- Name: <SystemType>k__BackingField
Entry: 9
Data: 30
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: false
- Name: _fieldAttributes
Entry: 7
Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0

View File

@@ -14,66 +14,79 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
[SerializeField] GridMover[] gridMovers2;
[SerializeField] Animator debugImageToIndicateSynced;
private float captureTime;
private Vector2[] positions;
private int[] captureTimes = new int[1000];
private Vector2[][] positionCaptures = new Vector2[1000][];
private int ownerIndex = -1;
private int remoteIndex = 0;
private int previousCaptureTime = -1;
public void Update()
{
if (!networkManager1.Synced || !networkManager2.Synced)
{
positions = null;
ownerIndex = -1;
remoteIndex = 0;
return;
}
if (positions == null)
var ownerTime = networkManager1.SyncedTimeTicks;
if (ownerTime > previousCaptureTime)
{
positions = GetPositions(gridMovers1);
captureTime = networkManager1.SyncedTime;
IncrementIndex(ref ownerIndex);
captureTimes[ownerIndex] = ownerTime;
previousCaptureTime = ownerTime;
positionCaptures[ownerIndex] = GetPositions(gridMovers1);
}
var remoteTime = networkManager2.SyncedTime;
if (captureTime > remoteTime)
var remoteTime = networkManager2.SyncedTimeTicks;
while (captureTimes[remoteIndex] < remoteTime && remoteIndex != ownerIndex)
{
return;
DiscardCapture();
}
if (captureTime < remoteTime)
Debug.Log($"ownerTime: {ownerTime}, remoteTime: {remoteTime}, ownerIndex: {ownerIndex} ({captureTimes[ownerIndex]}), remoteIndex: {remoteIndex} ({captureTimes[remoteIndex]})");
if (captureTimes[remoteIndex] == remoteTime)
{
Debug.Log($"{nameof(NetworkManagerSyncTester)} Skipping check");
positions = null;
return;
}
bool equal = IsEqual(remoteTime);
bool equal = IsEqual(remoteIndex);
SetIndicator(equal);
positions = null;
DiscardCapture();
}
}
private bool IsEqual(float remoteTime)
private void DiscardCapture()
{
positionCaptures[remoteIndex] = null;
IncrementIndex(ref remoteIndex);
}
private bool IsEqual(int index)
{
var equal = true;
var positions1 = positionCaptures[index];
var positions2 = GetPositions(gridMovers2);
for (int i = 0; i < positions.Length; i++)
for (int i = 0; i < positions1.Length; i++)
{
var gridMover1 = gridMovers1[i];
var gridMover1Position = positions[i];
var gridMover1Position = positions1[i];
var gridMover2 = gridMovers2[i];
var gridMover2Position = positions2[i];
var equal = gridMover1Position == gridMover2Position;
if (!equal)
if (gridMover1Position != gridMover2Position)
{
Debug.LogWarning($"{nameof(NetworkManagerSyncTester)} Desync found:\n{gridMover1.name} {gridMover1Position} (at {captureTime}) != {gridMover2.name} {gridMover2Position} (at {remoteTime})");
networkManager1.Pause();
networkManager2.Pause();
return false;
Debug.LogWarning($"{nameof(NetworkManagerSyncTester)} Desync found:\n{gridMover1.name} {gridMover1Position} != {gridMover2.name} {gridMover2Position}");
//networkManager1.Pause();
//networkManager2.Pause();
equal = false;
}
}
return true;
return equal;
}
private void SetIndicator(bool value)
@@ -84,7 +97,7 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
}
}
private Vector2[] GetPositions(GridMover[] gridMovers)
private static Vector2[] GetPositions(GridMover[] gridMovers)
{
var length = gridMovers.Length;
var positions = new Vector2[length];
@@ -96,4 +109,16 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
return positions;
}
private void IncrementIndex(ref int index)
{
if (index >= positionCaptures.Length - 1)
{
index = 0;
}
else
{
index++;
}
}
}