Новый байт в Unity C # [Marshal.SizeOf (typeof ())] Crash - PullRequest
0 голосов
/ 31 декабря 2018

Теперь отправьте или отправьте массив структуры 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>

Неправильно ли я использую массивы структур?

Справка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...