我正在使用protobuf-net来序列化/反序列化我游戏中的对象。
我的游戏类似于Simcity,模拟您的城市增长。我存储此模拟数据并在每次用户启动游戏时再次加载。
一切正常,但我想减少保存文件的大小。我将在这里大大简化我的代码,但我只想尝试尽可能清楚地解决问题......:
城市中的每个建筑都存储了一些描述建筑类型的元数据 - 用于渲染它的网格,住宅容量等。我在编辑器中定义了一大堆这些StructureDefinition。当游戏开始时,游戏管理器加载这些预定义的StructureDefinitions的列表,并且模拟将为在城市中产生的建筑物分配定义。所以建筑物只是提到了他们的结构定义。
每个结构定义都有一个独特的ID' value,只是一个整数。当游戏保存时,不是为每个建筑物序列化StructureDefinition,而是仅仅存储结构定义' ID'值。然后,当我的对象被反序列化时,我获取此ID值并从游戏管理器请求实际的StructureDefinition对象。我们需要序列化的是这个单个整数。这是我班级的样子:
public class Structure
{
public StructureDefinition Definition;
}
StructureDefintion有一个公共ID' member(Definition.ID
)还有一个静态DataLibrary类,如果调用以下静态函数,它将返回正确的StructureDefintion:
DataLibrary.GetStructureDefinition(int ID)
我已经拥有了我需要的所有东西,让它以我想要的方式工作,我只是不知道如何使用Protobuf,或者甚至可能。