Unity excel配置表导出工具

发表于2019-01-24
评论3 7.2k浏览
下面给大家分享的工具,主要用于把excel导出为二进制文件,供游戏读。

使用方法

将ExcelTools放在项目Assets文件夹中

创建配置表:

同一张表中可以有多个工作簿,第一行为注释,程序中不会读取,第二行为字段名,之后为内容。

制作好配置表后放入Asset/ExcelTools/xlsx文件夹中。

然后在ExcelTools/GameData/ConfigClass.cs中创建相应的配置表类,类名要与相应的配置表工作薄的名称相同,上面的表中就是ExcelATest1,ExcelATest2.
[Serializable]
public class ExcelATest1 : ConfigClass
{
    public string id;
    public string eat1_1;
    public string eat1_2;
    public int eat1_3;
}
[Serializable]
public class ExcelATest2 : ConfigClass
{
    public string id;
    public string eat2_1;
    public string eat2_2;
    public int eat2_3;
}
注意所有的配置表类需要加上[Serializable]。

之后需要创建存放导出的配置文件的文件夹,StreamingAssets/Config

然后点击菜单栏中的[配置表工具/生成配置表]

之后会看到文件选择窗口,窗口中会列出Asset/ExcelTools/xlsx中的全部文件

选择我们想要导出的配置表,如果没有问题,我们将看到导出成功的提示

这里会列出所有导出成功的工作薄,这时我们就可以在StreamingAssets/Config中看到我们的配置文件了

由于二进制文件使用起来比较方便,而且体积小,所以这里采用二进制文件来保存,如果不想用二进制,还可以使用xml等方式来存储,反正从excel读取出来都存在list里面,想怎么存储都很随意。

由于我们导出的是二进制文件,所以只能放在StreamingAssets文件夹下,并且使用的时候需要使用www的方式来加载。

项目中用一个测试脚本来测试数据:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
public class ReadTest : MonoBehaviour {
    //key:表名 val 表数据列表
    Dictionary<string, List<ConfigClass>> dic = new Dictionary<string, List<ConfigClass>>();
    int loadStep = 0;
    private void Start()
    {
        StartCoroutine(ReadConfigFile("ExcelATest1.msconfig"));
        StartCoroutine(ReadConfigFile("ExcelATest2.msconfig"));
        StartCoroutine(ReadConfigFile("ExcelBTest1.msconfig"));
    }
    void LogData(){
		Debug.Log(JsonMapper.ToJson(dic["ExcelATest1.msconfig"][0]));
		Debug.Log(JsonMapper.ToJson(dic["ExcelATest1.msconfig"][1]));
		Debug.Log(JsonMapper.ToJson(dic["ExcelATest1.msconfig"][2]));
    }
    IEnumerator ReadConfigFile(string filename)
    {
        loadStep++;
        string filepath = ExcelTool.GetConfigFilePath(filename);
        WWW www = new WWW(filepath);
        yield return www;
        while (www.isDone == false) yield return null;
        if (www.error == null)
        {
            byte[] data = www.bytes;
            List<ConfigClass> datalist = (List<ConfigClass>)ExcelTool.DeserializeObj(data);
            dic.Add(filename,datalist);
        }
        else
        {
            //GameLogTools.SetText("wwwError<<" + www.error + "<<" + filepath);
            Debug.Log("wwwError<<" + www.error + "<<" + filepath);
        }
        loadStep--;
        if(loadStep <= 0){
            LogData();
        }
    }
}

将脚本挂到游戏物体上并运行场景,可以看到控制台的输出:

接下来就可以在我们的程序中使用这些数据了。
项目地址:https://github.com/LiuFeng1011/Test/tree/master/Assets/ExcelTools

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引