【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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ViewPager2实现原理分析

ViewPager2 是 Android 开发中用于实现水平滑动视图的组件&#xff0c;它是 ViewPager 的一个改进版&#xff0c;提供了更多的功能和更好的性能。下面&#xff0c;我们将结合源码来简要分析 ViewPager2 的实现原理。 1. 基本架构 ViewPager2 的主要架构基于 RecyclerView&…

Activiti 6 兼容openGauss数据库bytes类型不匹配

当前有个项目需要做国产调研&#xff0c;需要适配高斯数据库&#xff0c;项目启动的时候&#xff0c;提示column "bytes_" is type bytea but expression is of type blob byte_字段是act_ge_bytearray表的&#xff0c;openGauss里的类型是bytea&#xff0c;类型是匹…

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程

一、问题描述 在日常的工作中,我们需要给不同角色的人员创建不同的账号,他们各自可访问的数据库或权限不一样,这时就需要创建用户和赋予不同的权限内容了。 二、问题分析 1、创建不同的角色账号; 2、给这些账号授予各自可访问数据库的权限。 三、实现方法 Centos8安装…

房子装修完显得大的一些

雅静说房子装修完怎么让它显得大一些      说七点,给大家总结装修三十年的经验      1,把阳台纳入大厅里来,拆掉开发商给的推拉门,换个大点但不影响通风的窗户      视觉上的通透感就会显得空间更大      2,全屋通铺,在瓦工阶段跟师父交代好,      直接通铺…

Java Generic练习(2024.7.25)

GenericExercise1 package GenericExercise20240725;import java.util.ArrayList; import java.util.List;public class GenericExercise1 {public static void main(String[] args) {// 泛型是JDK5以后引入的新的特性&#xff0c;主要目的是为了提供编译时的类型安全检测机制…

STM32——GPIO(LED闪烁)

一、什么是GPIO&#xff1f; GPIO&#xff08;通用输入输出接口&#xff09;&#xff1a; 1.GPIO 功能概述 GPIO 是通用输入/输出&#xff08;General Purpose I/O&#xff09;的简称&#xff0c;既能当输入口使用&#xff0c;又能当输出口使用。端口&#xff0c;就是元器件…

Java 代码规范if嵌套

在Java编程中&#xff0c;过度的if嵌套会使代码难以阅读和维护。为了遵循良好的代码规范&#xff0c;我们应尽量减少嵌套的深度。这通常可以通过重新组织代码或使用其他结构&#xff08;如switch语句&#xff0c;或者将逻辑封装到单独的方法中&#xff09;来实现。 以下是一个…

android settings提示音开关状态与修改(一)

android系统&#xff0c;settings提示音类型&#xff1a; 提示音开关默认状态&#xff0c;定义文件&#xff1a; frameworks/base/packages/SettingsProvider/res/values/defaults.xml 提示音默认定义&#xff1a; // 锁屏提示音 <integer name"def_lockscreen_sounds_…

Kylin自定义函数全解:释放数据分析的无限潜能

Kylin自定义函数全解&#xff1a;释放数据分析的无限潜能 Apache Kylin是一款高性能的分布式分析引擎&#xff0c;专为大规模数据集提供快速的SQL查询能力。Kylin的一个强大特性是支持自定义函数&#xff0c;这使得用户能够根据自己的业务需求扩展Kylin的数据处理能力。本文将…

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展 时间&#xff1a;2025年3月14-16日 地点&#xff1a;西安国际会展中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&am…

MySQL C API的介绍

1. MySQL C API是什么&#xff1f; MYSQL是最流行的SQL数据库管理系统&#xff0c;MySQL C API是一个基于C语言的API&#xff0c;用C语言编写的客户端应用程序可以使用它与MySQL服务器进行通信。 2. MySQL C API的发布 MYSQL C API代码随MySQL一起发布&#xff0c;并在libmy…

Nacos 2.x 新增 grpc 端口,Nginx 需要配置TCP端口转发的注意事项

Nacos 2.x 开始&#xff0c;最大的变化就是端口。在默认主端口 8848 之外又新增了三个端口&#xff0c;新增端口是在配置的主端口 server.port 的基础上&#xff0c;进行一定偏移量自动生成。 8848&#xff08;主端口&#xff0c;默认8848&#xff09;web页面端口及相关http接口…

导航网站WP主题/WP黑格导航主题BlackCandy-简约酷黑色高逼格+焕然一新的UI设计

源码简介&#xff1a; 导航网站WP主题-WP黑格导航主题BlackCandy&#xff0c;它有着简约酷黑色高逼格&#xff0c;而且有焕然一新的UI设计。它是一个简约漂亮的 WordPress 自媒体主题。黑格网址导航主题&#xff0c;自适应电脑端和手机端。 BlackCandy-V2.0这次全新升级了&am…

vite构建vue3项目hmr生效问题踩坑记录

vite构建vue3项目hmr生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR&#xff08;热模块替换&#xff09;带来的好处&#xff1a; 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码&#xff0c;减少等待时间保持应用状态在模块替…

Oauth2协议的四种模式

B站视频 概念 Oauth2.0&#xff08;Open Authorization&#xff09; 一个关于授权的开放网络标准 允许用户授权第三方应用访问用户存储在其他服务提供者上的信息 不需要将用户名和密码提供给第三方应用 Oauth2中的各个角色 授权码模式 第一步 获取授权码 以上流程中的授…

Unity3D结合AI教育大模型 开发AI教师 AI外教 AI英语教师案例

自2022年底ChatGPT引爆全球之后&#xff0c;大模型技术便迎来了一段崭新的快速发展期&#xff0c;由其在GPT4.0发布后&#xff0c;AI与教育领域结合产品研发、已成为教育AI科技竞争的新高地、未来产业的新赛道、经济发展的新引擎和新产品的诞生地。 据不完全统计&#xff0c;目…

Robot Operating System——Parameter设置的预处理、校验和成功回调

大纲 预处理校验成功回调完整代码测试总结 在《Robot Operating System——对Parameter设置进行校验》一文中&#xff0c;我们通过Node的add_on_set_parameters_callback方法&#xff0c;设置了一个回调函数&#xff0c;用于校验传递过来的Parameter参数。但是这个方法并不能对…

普通html文本如何使用Redux

在 HTML 文件中使用 Redux 通常涉及将 Redux 结合使用到一个前端框架&#xff08;比如 React、Angular、Vue.js 等&#xff09;中&#xff0c;而不是直接在 HTML 文件中使用。Redux 通常用于管理应用程序的状态&#xff0c;通过将状态集中存储在一个全局的状态树中&#xff0c;…

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序&#xff0c;如何在windows服务中优雅开启和关闭&#xff0c;废话不多说&#xff0c;开搞&#xff01;&#xff01;&#xff01;   使用方式&#xff1a;go程序 net服务启动 Ⅰ 开篇不利 Windows go进程编译后&#xff0c;为一个.exe文件,直接执行即…

[Vulnhub] Raven WordPress+SUDO-Python权限提升+MSQP自动化Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.159TCP: $ nmap -p- 192.168.101.159 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f3:5e:01:ef:93:4…