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

View File

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

View File

@@ -43,7 +43,7 @@ MonoBehaviour:
Data: Data:
- Name: - Name:
Entry: 12 Entry: 12
Data: 7 Data: 10
- Name: - Name:
Entry: 7 Entry: 7
Data: Data:
@@ -349,19 +349,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: captureTime Data: captureTimes
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: captureTime Data: captureTimes
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 23|System.RuntimeType, mscorlib Data: 23|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: System.Single, mscorlib Data: System.Int32[], mscorlib
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -403,25 +403,31 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: positions Data: positionCaptures
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: positions Data: positionCaptures
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 26|System.RuntimeType, mscorlib Data: 26|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: UnityEngine.Vector2[], UnityEngine.CoreModule Data: UnityEngine.Vector2[][], UnityEngine.CoreModule
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
- Name: <SystemType>k__BackingField - Name: <SystemType>k__BackingField
Entry: 9 Entry: 7
Data: 26 Data: 27|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Object[], mscorlib
- Name:
Entry: 8
Data:
- Name: <SyncMode>k__BackingField - Name: <SyncMode>k__BackingField
Entry: 7 Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -436,7 +442,157 @@ MonoBehaviour:
Data: false Data: false
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 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: - Name:
Entry: 12 Entry: 12
Data: 0 Data: 0

View File

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