Теперь отправьте или отправьте массив структуры C # в TCP.Проблема возникает, когда преобразование в буфер byte [] конфликтует с Unity.
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct GameRoomInfo{
[MarshalAs(UnmanagedType.I4)]
public int GameRoomNum;
[MarshalAs(UnmanagedType.I4)]
public int[] UID;
[MarshalAs(UnmanagedType.I4)]
public int[] CharacterType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Position_X;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Position_Y;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Position_Z;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Rotation_X;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Rotation_Y;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public float[] Rotation_Z;
public GameRoomInfo(int[] _UID, int[] _CharacterType, float[] _px, float[] _py, float[] _pz, float[] _rx, float[] _ry, float[] _rz)
{
GameRoomNum = 0;
UID = _UID;
CharacterType = _CharacterType;
Position_X = _px;
Position_Y = _py;
Position_Z = _pz;
Rotation_X = _rx;
Rotation_Y = _ry;
Rotation_Z = _rz;
}
public byte[] Serialize()
{
var buffer = new byte[Marshal.SizeOf(typeof(GameRoomInfo))];
var gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
var pBuffer = gch.AddrOfPinnedObject();
Marshal.StructureToPtr(this, pBuffer, false);
gch.Free();
return buffer;
}
public void Deserialize(ref byte[] data)
{
var gch = GCHandle.Alloc(data, GCHandleType.Pinned);
this = (GameRoomInfo)Marshal.PtrToStructure(gch.AddrOfPinnedObject(), typeof(GameRoomInfo));
gch.Free();
}}
В Serialize () var buffer1 = новый байт [Marshal.SizeOf (typeof (GameRoomInfo))]] Эта часть вызывает Unity 3d Crash.
Удаление int [] <--- Массив устраняет проблему. </p>
Неправильно ли я использую массивы структур?
Справка