니티로 실시간 네트워크 게임을 혼자서 만드는 중인데..

다음과 같이 데이터를 서로 주고 받습니다..

 

//구조체를 바이트배열로 만듬

public static byte[] StructToByteArray(this object obj)
    {
        int datasize = Marshal.SizeOf(obj);
        IntPtr buff = Marshal.AllocHGlobal(datasize);
        Marshal.StructureToPtr(obj, buff, false);
        byte[] byte[datasize];
        Marshal.Copy(buff, data, 0, datasize);
        Marshal.FreeHGlobal(buff);
        return data;
    }

//바이트배열을 구조체로 만듬

    public static T ByteToStructure<T>(byte[] data)
    {
        IntPtr buff = Marshal.AllocHGlobal(data.Length);
        Marshal.Copy(data, 0, buff, data.Length);
        object obj = Marshal.PtrToStructure(buff, typeof(T));
        Marshal.FreeHGlobal(buff);
        return (T)obj;
    }

 

다음과 같이 데이트를 바이트로 넘기는데..문제는 struct의 구조체 속성정의가 생각보다 쉽지는 않네요..

길이가 명확한 데이터는 만들기 쉬운데..그렇지 않은 경우 어떻게 하는지 궁금합니다..테스트 환경이 별로 좋지 못해서..계속 빌드하려니 깊은 빡침을 느껴서 아는분 쫌 알려주세요..

[StructLayout(LayoutKind.Sequential, Pack = 1)]

public struct CreateGameObjectFromResource
{
    public byte func; //호출되는 함수
    public int objectID; //오브젝트 ID
    public Vector3 position; //생성 포지션
    //여유있게 40으로 잡음
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
    public string path; //리소스 경로
    public Peer peer;
}

 

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ChattingMessage
{
    public byte func;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
    public string message;
}

 

위와 같이 구조체를 만들어서 잘쓰고 있습니다.

 

 

 

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct StringArrayTest
{
    public byte func;
    public string[] stringData;
}

 

문제는 위와 같이 stringarray데이터를 주고 받고 싶은데..어떻게 써야될지 모르겠네요..

Marshal은 유니티 커뮤니티보다 이쪽이 더 쓰시느 분이 많을거같아서 질문드립니다.