I have successfully managed to serialize my class using Photon docs and sending one BuildingData via RPC works fine. However my goal is to send an array of those objects.
When trying to send an array, I’m getting this error:
NullReferenceException: Object reference not set to an instance of an object
In this line of code (full code will be below)
Protocol.Serialize(buildingData.x, bytes, ref index);
Full code:
public class BuildingData
{
public int x;
public int y;
public int type;
}
public class CustomPhotonSerialization
{
public static readonly byte[] buildingDataMemoryBuffer = new byte[12];
public static short SerializeBuildingData(StreamBuffer outStream, object customobject)
{
BuildingData buildingData = ((BuildingData) customobject);
lock (buildingDataMemoryBuffer)
{
byte[] bytes = buildingDataMemoryBuffer;
int index = 0;
Protocol.Serialize(buildingData.x, bytes, ref index);
Protocol.Serialize(buildingData.y, bytes, ref index);
Protocol.Serialize(buildingData.type, bytes, ref index);
outStream.Write(bytes, 0, 12);
}
return 12;
}
public static object DeserializeBuildingData(StreamBuffer inStream, short length)
{
BuildingData buildingData = new BuildingData();
lock (buildingDataMemoryBuffer)
{
inStream.Read(buildingDataMemoryBuffer, 0, 12);
int index = 0;
Protocol.Deserialize(out buildingData.x, buildingDataMemoryBuffer, ref index);
Protocol.Deserialize(out buildingData.y, buildingDataMemoryBuffer, ref index);
Protocol.Deserialize(out buildingData.type, buildingDataMemoryBuffer, ref index);
}
return buildingData;
}
}
public class SerializationTest : MonoBehaviour
{
private PhotonView photonView;
private void Start()
{
photonView = GetComponent<PhotonView>();
PhotonPeer.RegisterType(typeof(BuildingData), 255, CustomPhotonSerialization.SerializeBuildingData, CustomPhotonSerialization.DeserializeBuildingData);
}
[Button]
public void SendData()
{
BuildingData buildingData1 = new BuildingData();
buildingData1.x = 2;
buildingData1.y = 1;
buildingData1.type = 37;
BuildingData buildingData2 = new BuildingData();
buildingData2.x = 3;
buildingData2.y = 5;
buildingData2.type = 28;
BuildingData[] datas = new BuildingData[2];
photonView.RPC("TestSingle", RpcTarget.AllViaServer, buildingData1);
photonView.RPC("TestArray", RpcTarget.AllViaServer, datas);
}
[PunRPC]
public void TestSingle(BuildingData buildingData)
{
Debug.Log($"Received: {buildingData.x}, {buildingData.y}, {buildingData.type}");
}
[PunRPC]
public void TestArray(BuildingData[] buildingDatas)
{
foreach (BuildingData buildingData in buildingDatas)
{
Debug.Log($"Received: {buildingData.x}, {buildingData.y}, {buildingData.type}");
}
}
}