フレームのシリアライズ
C#
static unsafe byte[] PtrToArray(byte* ptr, int size) {
  Assert.Check(size >= 0);
  var bytes = new byte[size];
  if (size > 1) {
    fixed (byte* bytesPtr = bytes) {
      Native.Copy((void*)bytesPtr, (void*)ptr, (ulong)size);
    }
  }
  return bytes;
}
static unsafe void ArrayToPtr(byte* ptr, int size, byte[] bytes) {
  Assert.Check(size >= 0);
  if (size > 1) {
    fixed (byte* bytesPtr = bytes) {
      Native.Copy((void*)ptr, (void*)bytesPtr, (ulong)size);
    }
  }
}
public void GetFrameState(out byte[] globals, out byte[] entities) {
  globals = PtrToArray((byte*)_globals, sizeof(_globals_));
  entities = PtrToArray((byte*)_entities, sizeof(_entities_));
}
public void SetFrameState(byte[] globals, byte[] entities) {
  Assert.Check(globals != null);
  Assert.Check(entities != null);
  Assert.Check(sizeof(_globals_) == globals.Length);
  Assert.Check(sizeof(_entities_) == entities.Length);
  ArrayToPtr((byte*)_globals, sizeof(_globals_), globals);
  ArrayToPtr((byte*)_entities, sizeof(_entities_), entities);
}