unity excel配置表导出工具

很久之前写的一个工具,用于把excel导出为二进制文件,供游戏读取。

完整项目在我的github中:https://github.com/LiuFeng1011/Test/tree/master/Assets/ExcelTools

使用方法

将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();
        }
    }

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


接下来就可以在我们的程序中使用这些数据了。




  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值