Unity3D中针对iOS的ProtocolBuffer

时间:2012-12-05 14:22:17

标签: c# ios unity3d protocol-buffers protobuf-net

我试图在针对C#设备的Unity3D项目中使用Marc Gravell的protobuf-net iOS协议缓冲区实现。

我设法使用C#从协议缓冲区文件MyFile.cs创建了一个MyFile.proto文件(让我们称之为protogen

导入文件后protobuf-net.dll(我在Unity文件夹中使用dll),我可以成功反序列化以前序列化的文件(我从python代码中进行序列化,所有工作细):

MyType myType;
using (var file = File.OpenRead("Assets/MyTypeBin")) 
{
  myType = ProtoBuf.Serializer.Deserialize<MyType>(file) ;
}

上述解决方案在模拟器上运行正常,但在定位iOS设备(es.ipad)时失败。

我试图从unity/protobuf-net.dll切换到CoreOnly/ios/protobuf-net.dll,但是最后一个它无法编译。似乎Deserialize方法未在核心dll中声明:

  

错误CS0117:ProtoBuf.Serializer' does not contain a definition for 反序列化&#39;

我已经阅读了这个article,但它似乎已经过时了。它指的是protobuf-net的旧实现。我希望同时有所改变。

我的问题是:

  1. 是否可以使用protobuf-net r602定位iOS来自Unity3D的设备,而无需

      

    创建您想要的模型类的库dll(程序集)   序列化/反序列化

    像链接博客文章中建议的那样?我希望拥有更快的工作流程,可能直接导入C#项目中protogen生成的Unity3D文件

  2. 如果是,怎么样?哪个dll我需要参考?使上述代码段在iOS设备上重新运行的步骤是什么?

1 个答案:

答案 0 :(得分:0)

我相信这是解决方案:

  

在iOS上,Apple存在一个问题,即在运行时不允许JIT编译,这会阻止使用protobuf。它可以通过Environment.SetEnvironmentVariable(&#34; MONO_REFLECTION_SERIALIZER&#34;,&#34; yes&#34;)来解决;在任何protobuf使用之前,它只适用于.NET 4.6。 (我试过3.5并且关于JIT的错误仍然出现)

https://github.com/5argon/protobuf-unity