Skip to content

INetworkSerialization issues with NativeArrays and NativeLists. #3071

Open
@MilkyChestnut

Description

@MilkyChestnut

Description

NativeArrays seem to throw a memory leak error if I attempt to serialize the class using them with INetworkSerializable.
NetworkSerialize with a NativeArray and setting the Allacator.Persistent will throw this memory leak issue.

`
public class TestActionSystem : INetworkSerializable, IDisposable
{

    private NativeArray<int> _intArray;
    
    public void Setup()
    {
        _intArray = new NativeArray<int>(1, Allocator.Persistent);
    }
    

    public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
    {
       
        serializer.SerializeValue(ref _intArray, Allocator.Persistent); //this will throw the error
    }
    
    public void Dispose()
    {
        Debug.Log($"Disposing _intArray {_intArray.IsCreated} {_intArray.Length}");
        if (_intArray.IsCreated)
        {
            _intArray.Dispose();
        }
        
    }
}

`
NativeArrays with a custom struct also break if that custom struct impliments INetworkSerializable. If i dont add that interface and or serialize using the methods here it does work.

NativeLists dont even appear to work. I tried the simplest version with just ints, and this didn't work .
`
public class TestActionSystem : INetworkSerializable, IDisposable
{

    public NativeList<int> IntList => _intList;
    
    private NativeList<int> _intList;
    
    public void Setup()
    {
        _intList = new NativeList<int>(0, Allocator.Persistent);
    }

    public void Add(int value)
    {
        _intList.Add(value);
    }


    public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
    {
        serializer.SerializeValue(ref _intList);
    }

   

    public void Dispose()
    {
        if (_intList.IsCreated)
        {
            _intList.Dispose();
        }
    }
}

`

My goal is hopefully just use a NativeList with my own custom structs with a few more NativeLists inside (to get around the issue of directly nesting NativeLists with other NativeLists.

But I can't even get the NativeArrays to work without a memory leak, and the NativeLists to even serialize.

Reproduce Steps

Provided in description

Actual Outcome

NativeArray with a int fires a memory leak exception. (needs to work with custom structs)

NativeList with a int won't even serailize.

Expected Outcome

NativeArray doesn't fire memory leak

NativeList serailizes on the network.

Screenshots

If applicable, add screenshots to help explain your problem.

Environment

  • OS: Windows 11 Home 23H2
  • Unity Version: 6000.0.19f1
  • Netcode Version: 2.0.0 (latest release full version)

Additional Context

Add any other context about the problem here. Logs, code snippets would be useful here but please also consider attaching a minimal Unity project that reproduces the issue.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions