Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

INetworkSerialization issues with NativeArrays and NativeLists. #3071

Open
MilkyChestnut opened this issue Sep 19, 2024 · 3 comments
Open

INetworkSerialization issues with NativeArrays and NativeLists. #3071

MilkyChestnut opened this issue Sep 19, 2024 · 3 comments
Assignees
Labels
Investigating Issue is currently being investigated stat:awaiting triage Status - Awaiting triage from the Netcode team. type:bug Bug Report

Comments

@MilkyChestnut
Copy link

MilkyChestnut commented Sep 19, 2024

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.

@MilkyChestnut MilkyChestnut added stat:awaiting triage Status - Awaiting triage from the Netcode team. type:bug Bug Report labels Sep 19, 2024
@MilkyChestnut
Copy link
Author

Further follow up, conversion methods for NativeList don't seem to work either. I get an error about things not being implimented.

_intArray = _nativeIntList.ToArray();

@NoelStephensUnity
Copy link
Collaborator

@MilkyChestnut
If you could provide me with the scripts you are using for both the INetworkSerializable implementations and the scripts that use them it would be very helpful. As an example, I am not sure if you are using TestActionSystem in an RPC or as the type within a NetworkVariable. Knowing the context of usage will help me to narrow down this issue so I can replicate it on my side.

@NoelStephensUnity NoelStephensUnity self-assigned this Sep 28, 2024
@NoelStephensUnity NoelStephensUnity added the Investigating Issue is currently being investigated label Sep 28, 2024
@MilkyChestnut
Copy link
Author

@NoelStephensUnity Sure just give me some time to setup a demo. I've resorted to using work arounds fn with just regular arrays and lists that I serialized into arrays. I'm crunching rn so give me time to finish and Ill wip up a demo project for you.

And TestActionSystem is passed via a RPC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Investigating Issue is currently being investigated stat:awaiting triage Status - Awaiting triage from the Netcode team. type:bug Bug Report
Projects
None yet
Development

No branches or pull requests

2 participants