I get an error must be a non-nullable type when using nested serialization with network variables.
Expected:
Nested serialization works per the doc: https://docs-multiplayer.unity3d.com/docs/develop/advanced-topics/serialization/inetworkserializable
//error about AbilityParam must be non-nullable type
[HideInInspector] private NetworkVariable<AbilityParam> m_CurrentParams = new NetworkVariable<AbilityParam>();
public struct AbilityParam: INetworkSerializable, IEquatable<AbilityParam>
{
public AbilityTargetParam[] m_Targets;
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int length = 0;
if(!serializer.IsReader)
{
length = m_Targets.Length;
}
serializer.SerializeValue(ref length);
if(serializer.IsReader)
{
m_Targets = new AbilityTargetParam[length];
}
for (int i = 0; i < length; ++i)
{
m_Targets[i].NetworkSerialize(serializer);
}
}
public bool Equals(AbilityParam other)
{
return m_Targets.Equals(other.m_Targets);
}
}
public struct AbilityTargetParam: INetworkSerializable, IEquatable<AbilityTargetParam>
{
public NetworkedActor Target
{
get
{
m_Target.TryGet(out NetworkedActor net);
return net;
}
}
public NetworkBehaviourReference m_Target; //Network actor
public Vector3 m_TargetPosition;
public Vector3 m_Origin;
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
serializer.SerializeValue(ref m_Target);
serializer.SerializeValue(ref m_TargetPosition);
serializer.SerializeValue(ref m_Origin);
}
public bool Equals(AbilityTargetParam other)
{
return m_Target.Equals(other.m_Target) && m_TargetPosition.Equals(other.m_TargetPosition) && m_Origin.Equals(other.m_Origin);
}
}