protobuf-net运行在Unity上,修复IL2CPP反射不兼容问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protobuf-net运行在Unity上,修复IL2CPP反射不兼容问题相关的知识,希望对你有一定的参考价值。
参考技术A Unity开发中,我们可能需要用到 protobuf-net 这个C#实现的ProtoBuff库。但是, protobuf-net 在IL2CPP下,因为反射的一个不兼容问题,是会运行崩溃的,导致ios下没法玩。
这时候需要对 protobuf-net 稍作修改,重新编译出DLL才能在Unity下完美运行。
这种修改,估计很多遇到同样问题的项目都遇过了。 分享给遇到同样困难的人,希望有帮助。
详细修改,放到GitHub的一个分支上了。
https://github.com/kingsoft-topgame/protobuf-net/commit/4eddeeb41b4e67e3ed59b11c727c73a12f48589d
Protobuf-net 和 Unity3D 类型
【中文标题】Protobuf-net 和 Unity3D 类型【英文标题】:Protobuf-net and Unity3D types 【发布时间】:2014-09-23 04:50:19 【问题描述】:我对 Unity3d 中的 protobuf-net 有疑问。 是否可以序列化 unity3d 类型:GameObject. 例如,我有一个 GameObject 类型的类属性,这个类是序列化/反序列化的?
using ProtoBuf;
using UnityEngine;
...
[ProtoContract]
public class Example
[ProtoMember(1)]
public int Count get;set;
[ProtoMember(2)]
public string Name get;set;
[ProtoMember(3)]
public GameObject MyGameObject get;set; // ???
对不起,我的英语..
【问题讨论】:
您能否提供将GameObject 分配为RunTimeTypeModel 的语法 【参考方案1】:你必须告诉 protobuf-net 你想序列化哪些类和属性。因为你不能用属性来装饰GameObject
,所以有不同的方法来做到这一点。
例如,您可以使用 RuntimeTypeModel.Default
执行此操作,这里是类 Point
的示例,它将属性 X
和 Y
设置为序列化。
RuntimeTypeModel.Default
.Add(typeof(System.Windows.Point), false).Add("X", "Y");
在这种情况下,您的 GameObject
必须有一个默认构造函数。
【讨论】:
能否提供分配GameObject
as RunTimeTypeModel 的语法以上是关于protobuf-net运行在Unity上,修复IL2CPP反射不兼容问题的主要内容,如果未能解决你的问题,请参考以下文章
Unity使用protobuf-net进行二进制序列化与反序列化