Unity protobuf中repeated转C#文件List只读问题

Unity protobuf中repeated转C#文件List只读问题

  • 介绍
  • 问题
  • 解决方案
  • 总结

介绍

工具这里我就不多介绍了,如果有用到ProtoGen工具的可以继续看一下我后面的方法。

问题

如下图所示,我这里随便用了一个.proto文件,看下我这里面的repeated标记的字段,然后在对比我下面对应的C#文件发现是只读的不能赋值。
Unity protobuf中repeated转C#文件List只读问题_第1张图片
对应的C#文件如下图所示
Unity protobuf中repeated转C#文件List只读问题_第2张图片
对比了一下发现这个repeated标记的数组生成的C#文件对应的字段是只读的,没有Set属性,那么出现这种情况的原因只能是因为生成的文件强制生成的是只读属性而不是可读可写的属性。

解决方案

顺着先找到我们刚才运行的.Bat命令文件,找到将.proto文件转成C#文件时使用的工具是什么。
Unity protobuf中repeated转C#文件List只读问题_第3张图片
从上面的这个文件中能看出来,我们实际上运行的是ProtoGen里面的一个可执行文件。
Unity protobuf中repeated转C#文件List只读问题_第4张图片
找到下面文件夹中的生成C#的配置文件如下图,双击打开
Unity protobuf中repeated转C#文件List只读问题_第5张图片
Ctrl + F搜索一下LABEL_REPEATED找到对应的位置
Unity protobuf中repeated转C#文件List只读问题_第6张图片
修改文件如下,删除画红框的这段 readonly
Unity protobuf中repeated转C#文件List只读问题_第7张图片
修改文件如下,在删除掉画红框部分
Unity protobuf中repeated转C#文件List只读问题_第8张图片
都修改完结果如下所示
Unity protobuf中repeated转C#文件List只读问题_第9张图片
保存文件退出 然后重新生成文件尝试一下
Unity protobuf中repeated转C#文件List只读问题_第10张图片

总结

这个其实就是文件中的配置默认生成的list是私有且只有get属性的,修改生成的配置文件即可解决这个问题。

你可能感兴趣的:(Unity,网络,unity,c#,游戏引擎,protobuf,ProtoGen)