JumboWu 主页

版权声明:本文为Jumbo原创文章,采用[知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议],转载前请保证理解此协议 原文出处:https://www.jianshu.com/p/747c63d5d56b

将Excel表格数据转成Protobuf V3【Unity】

Win7 or Win10环境

安装Install.bat

1、xls2protobuf_v3.py 将表格数据转成:.proto *.bin *.txt等 2、protoc.exe 通过读取.proto生成.cs脚本解析类 3、Unity通过protobuf-V3.0\csharp_unity\Google.Protobuf插件读取.bin文件

2、数据表格制作: 参考xls2protobuf_v3.py定义描述 3、protoc.exe相关命令参数 : protoc –help查看 需要配置环境变量,在Path后面加上;{protobuf-V3.0\src\protoc.exe 路径目录}

Unity使用

1、protobuf支持Unity的CSharp库:将protobuf-V3.0\csharp_unity\Google.Protobuf文件夹拷贝到Unity项目Plugins下面

2、proto生成的.cs代码目录:Scripts\ResData 3、表格生成的.bin数据目录:StreamingAssets\DataConfig

4、参考代码示例:
using System; using System.IO; using UnityEngine; using Google.Protobuf;

namespace Assets.Scripts.ResData { class ResDataManager {

    private static ResDataManager sInstance;

    public static ResDataManager Instance
    {
        get
        {
            if (null == sInstance)
            {
                sInstance = new ResDataManager();
            }

            return sInstance;
        }
    }


​ public byte[] ReadDataConfig(string FileName) ​ { ​ FileStream fs = GetDataFileStream(FileName); ​ if (null != fs) ​ { ​ byte[] bytes = new byte[(int)fs.Length]; ​ fs.Read(bytes, 0, (int)fs.Length); ​
​ fs.Close(); ​ return bytes; ​ } ​
​ return null; ​ }

    private  FileStream GetDataFileStream(string fileName)
    {
        string filePath = GetDataConfigPath(fileName);
        if (File.Exists(filePath))
        {
            FileStream fs = new FileStream(filePath, FileMode.Open);
           
            return fs;
        }

        return null;
    }
    private string GetDataConfigPath(string fileName)
    {
        return Application.streamingAssetsPath + "/DataConfig/" + fileName;
    }
} }

读取二进制数据示例: //GOODS_INFO_ARRAY对应的结构:GOODS_INFO GOODS_INFO_ARRAY arr = GOODS_INFO_ARRAY.Parser.ParseFrom(ResDataManager.Instance.ReadDataConfig(“Goods.bin”));

Fork me on GitHub