您的位置:首页 > 汽车 > 时评 > 【Unity】关于Luban的简单使用

【Unity】关于Luban的简单使用

2024/9/23 19:02:47 来源:https://blog.csdn.net/m0_38141357/article/details/140603109  浏览:    关键词:【Unity】关于Luban的简单使用

最近看了下Luban导出Excel数据的方式,来记录下

【Unity】关于Luban的简单使用

  • 安装Luban
  • 开始使用
    • Unity
    • Luban
    • C#
  • 扩展

安装Luban

Luban文档:https://luban.doc.code-philosophy.com/docs/beginner/quickstart
1.安装dotnet sdk 8.0或更高版本sdk
2.github上把luban_examples项目下载下来,有些文件配置可以直接使用示例项目里的
3.安装git,后续在unity安装插件时会用到

开始使用

Unity

1.新建Unity工程,这里我用的2021.3.19f1版本
2.打开Package Manger,在Window->Package Manager,使用url地址进行插件安装
在这里插入图片描述

在这里插入图片描述
url地址:https://github.com/focus-creative-games/luban_unity.git
在这里插入图片描述
在Unity的PlayerSettings里开启unsafe选项
在这里插入图片描述

Luban

创建gen.bat文件,位置无所谓,只要路径能写对就行,这个文件可以从上面下的实例项目里找到,也可以自己创建

  • LUBAN_DLL Luban.dll文件的路径。 指向 luban_examples/Tools/Luban/Luban.dll
  • CONF_ROOT 配置项目的路径。指向 luban_examples/DataTables
  • ‘-t’ 生成目标。可以为 client、server、all之类的值
  • ‘-c’ 生成的代码类型。 cs-simple-json为生成使用SimpleJSON加载json数据的c#代码
  • ‘-d’ 生成的数据类型
  • ‘outputCodeDir’ c#代码的输出目录
  • ‘outputDataDir’ json数据的输出目录
set WORKSPACE=..\..
set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=..\dotnet %LUBAN_DLL% ^-t client ^-c cs-simple-json ^-d json  ^--conf %CONF_ROOT%\luban.conf ^-x outputCodeDir=%WORKSPACE%\LubanTest\Assets\Script\Template ^-x outputDataDir=%CONF_ROOT%\outputpause

新建Task表

  • 第1行是字段名行。单元格 A1 必须以##开头。表示这是一个有效数据表。
  • 第2行是字段类型行。第1个单元格必须为 ##type。
  • 第3行是分组行。c表示字段属于客户端,s表示属于属于服务器,c,s表示同时属于所有,留空也表示属于所有。
  • 第4行是注释行。 以##开头。 可以有0-N个注释行,而且可以出现在任何位置
  • 第5行起是数据行。

在这里插入图片描述
在__tables__.xlsx里添加导出类,这里我试了四个表
在这里插入图片描述
运行gen.bat文件,成功的话最后会出现bye
在这里插入图片描述
也可以在unity中看到导出的c#文件
在这里插入图片描述

C#

using System;
using System.IO;
using SimpleJSON;
using UnityEngine;namespace Script
{public class Main : MonoBehaviour{private void Start(){var tables = new cfg.Tables(readConfig);Debug.Log(tables.TbReward.Get(1001).Name);Debug.Log(tables.TbActivity.Get(1001).StartTime);}private JSONNode readConfig(string file){return JSON.Parse(File.ReadAllText(Application.dataPath + "/../../MiniTemplate/output/" + file + ".json", System.Text.Encoding.UTF8));}}
}

运行后打印结果
在这里插入图片描述

扩展

目前简单使用感受,每次新建一个表就要在__tables__.xlsx里手动添加一行,比较麻烦,写了一个py自动处理
xlrd库记得用1.2.0版本的,最新版无法读取xlsx文件

# -*- coding: utf-8 -*-
import lxml.etree as etree
import osimport xlrd
import xlwt
import pandas
import subprocessexeclDataTitle = []
fileList = []def read_excel_xls(path):workbook = xlrd.open_workbook(path)  # 打开工作簿sheets = workbook.sheet_names()  # 获取工作簿中的所有表格worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格for i in range(0, 3):data = []for j in range(0, worksheet.ncols):data.append(worksheet.cell_value(i, j))execlDataTitle.append(data)def write_excel_xls(path):if os.path.exists(path):os.remove(path)index = len(execlDataTitle)  # 获取需要写入数据的行数workbook = xlwt.Workbook()  # 新建一个工作簿sheet = workbook.add_sheet("Sheet1")  # 在工作簿中新建一个表格##设置边框实线borders = xlwt.Borders()borders.left = xlwt.Borders.THINborders.right = xlwt.Borders.THINborders.top = xlwt.Borders.THINborders.bottom = xlwt.Borders.THIN##设置居中alignment = xlwt.Alignment()alignment.horz = xlwt.Alignment.HORZ_CENTERalignment.vert = xlwt.Alignment.VERT_CENTERfor i in range(0, index + len(fileList)):##行高度tall_style = xlwt.easyxf('font:height 500')sheet.row(i).set_style(tall_style)for j in range(0, len(execlDataTitle[0])):##列宽度sheet.col(j).width = 5000##单元格样式style = xlwt.XFStyle()style.alignment = alignment##自动换行style.alignment.wrap = 1if i <= 2:pattern = xlwt.Pattern()pattern.pattern = xlwt.Pattern.SOLID_PATTERNpattern.pattern_fore_colour = 17style.pattern = patternstyle.borders = borderssheet.write(i, j, execlDataTitle[i][j], style)  # 像表格中写入数据(对应的行和列)else:style.borders = bordersfileName = fileList[i - 3]fileClass = fileList[i - 3].replace(".xlsx", "")if execlDataTitle[0][j] == "full_name":sheet.write(i, j, fileClass.lower() + ".Tb" + fileClass.capitalize(), style)elif execlDataTitle[0][j] == "value_type":sheet.write(i, j, fileClass.capitalize(), style)elif execlDataTitle[0][j] == "read_schema_from_file":sheet.write(i, j, "TRUE", style)elif execlDataTitle[0][j] == "input":sheet.write(i, j, fileName, style)elif execlDataTitle[0][j] == "comment":sheet.write(i, j, fileClass + "表", style)else:sheet.write(i, j, "", style)workbook.save(path)  # 保存工作簿print("xls格式表格写入数据成功!")if __name__ == "__main__":tableName = ""baseFileName = os.path.basename(__file__)for root, dirs, files in os.walk("../Datas"):for file in files:# name = os.path.join(root, file).split("\\")[-1].replace("-", "==").replace(".tar.gz", "").replace(".tar", "")firstName = file[1]if file != baseFileName and firstName != "_" and firstName != "$":print(file)fileList.append(file)if file.find("__tables__") != -1:tableName = os.path.join(root, file)if tableName == "":print("tableName为空")read_excel_xls(tableName)write_excel_xls(tableName)print("complete!!!")subprocess.run(['___Gen.bat'])

再用pyinstaller命令打包成exe文件就可以直接运行了

pyinstaller -F ___GenExcelData.py
copy /Y dist\___GenExcelData.exe .
rd /S /Q build
rd /S /Q dist
rd /S /Q __pycache__
del /Q ___GenExcelData.spec

我的是和表放在同一个目录下
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com