diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs index 9a891ec64d..5e0b8d8287 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode public class NetworkList : NetworkVariableSerialization where T : unmanaged, IEquatable { private NativeList m_List = new NativeList(64, Allocator.Persistent); + private NativeList m_ListAtLastReset = new NativeList(64, Allocator.Persistent); private NativeList> m_DirtyEvents = new NativeList>(64, Allocator.Persistent); /// @@ -41,7 +42,11 @@ public NetworkList(IEnumerable values = default, public override void ResetDirty() { base.ResetDirty(); - m_DirtyEvents.Clear(); + if (m_DirtyEvents.Length > 0) + { + m_DirtyEvents.Clear(); + m_ListAtLastReset.CopyFrom(m_List); + } } /// @@ -109,10 +114,10 @@ public override void WriteDelta(FastBufferWriter writer) /// public override void WriteField(FastBufferWriter writer) { - writer.WriteValueSafe((ushort)m_List.Length); - for (int i = 0; i < m_List.Length; i++) + writer.WriteValueSafe((ushort)m_ListAtLastReset.Length); + for (int i = 0; i < m_ListAtLastReset.Length; i++) { - Write(writer, m_List[i]); + Write(writer, m_ListAtLastReset[i]); } } @@ -454,6 +459,7 @@ public int LastModifiedTick public override void Dispose() { m_List.Dispose(); + m_ListAtLastReset.Dispose(); m_DirtyEvents.Dispose(); } }