当前位置: 首页 > news >正文

【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

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

相关文章:

【Unity】关于Luban的简单使用

最近看了下Luban导出Excel数据的方式&#xff0c;来记录下 【Unity】关于Luban的简单使用 安装Luban开始使用UnityLubanC# 扩展 安装Luban Luban文档&#xff1a;https://luban.doc.code-philosophy.com/docs/beginner/quickstart 1.安装dotnet sdk 8.0或更高版本sdk 2.githu…...

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域&#xff0c;确保每笔交易的安全与合规是至关重要的。而企业公户验证API&#xff0c;正是这样一位默默守护的数字卫士&#xff0c;它通过智能化的手段&#xff0c;简化了企业对公账户验证流程&#xff0c;让繁琐的审核变得快捷且可靠。 什么是企业公…...

杰发科技Bootloader(2)—— 基于7840的Keil配置地址

序 在7840的sample代码里面有一个简单的Boot跳转APP的示例 PFlash地址从0开始 DFlash的地址从1000000开始 Boot解析 他的boot地址配置为0 Boot的代码主要是这几行&#xff0c;主要作用就是Flash的跳转 int main(void) {SystemClock_Config();InitDebug();printf("demo…...

cmd常用命令

在Windows操作系统中&#xff0c;CMD&#xff08;Command Prompt&#xff09;是一个强大的命令行工具&#xff0c;允许用户通过键入命令来执行各种系统级操作。以下是一些常用的CMD命令及其功能&#xff1a; 文件与目录管理 dir&#xff1a;显示当前目录下的文件和子目录列表。…...

PCIe 以太网芯片 RTL8125B 的 spec 和 Linux driver 分析备忘

1,下载 RTL8125B driver 下载页&#xff1a; https://www.realtek.com/Download/List?cate_id584 2,RTL8125B datasheet下载 下载页&#xff1a; https://file.elecfans.com/web2/M00/44/D8/poYBAGKHVriAHnfWADAT6T6hjVk715.pdf3, 编译driver 解压&#xff1a; $ tar xj…...

Python tkinter Menu菜单组件详解

好久没有更新了&#xff0c;今天我来领大家熟悉一下Menu组件 1.认识、了解Menu 什么是Menu menu组件是tkinter中的菜单组件&#xff0c;通过该组件&#xff0c;开发者可以为窗口设计菜单和工具栏等。&#xff08;ttk还提供了treeview树形菜单&#xff0c;python遍历目录的两种…...

谷粒商城实战笔记-46-商品服务-API-三级分类-配置网关路由与路径重写

文章目录 一&#xff0c;准备工作1&#xff0c;新增一级菜单2&#xff0c;新增二级菜单 二&#xff0c;前端树形界面开发1&#xff0c;开发分类展示组件 三&#xff0c;远程调用接口获取商品分类数据1&#xff0c;远程调用2&#xff0c;路由配置 错误记录 本节的主要内容&#…...

简要了解sql注入

sql注入安全测试中危害 数据库中的数据&#xff0c;对数据库数据进行操作&#xff08;查询、删除等&#xff09;&#xff1b;网站的权限&#xff0c;找到注入点后可后门写入&#xff1b; sql注入产生原理详细分析 可控变量&#xff0c;带入数据库查询&#xff0c;变量未存在…...

Java 扫雷游戏

程序分析 使用Java编写的扫雷游戏界面程序&#xff0c;主要内容总结如下&#xff1a; Frame类继承自JFrame&#xff0c;构建了扫雷游戏的界面。 包含文本框text、标签nowBomb和setBomb、按钮start、面板MenuPamel和bombPanel等组件。通过jbInit方法进行初始化设置&#xff0c;…...

vue3 命令运行窗口暴露网络地址,以及修改端口号

一般情况下这里的地址是隐藏的 这里加上 --host 可以暴露网络地址&#xff0c;再加上--port --8080 就可以将端口号修改为8080&#xff08;修改后边的数字就可以修改为你想要的端口号&#xff09;...

由CANoe自带协议栈在TCP断开连接时同时发送两条FIN报文引起的注意事项

在我写这篇文章CAPL如何在底层模拟TCP Server端断开TCP连接时,我发现了一个奇怪的现象。我为了使用CAPL组装报文的方式实现TCP Server断开连接的过程,插入一个网络节点作为Client端。为了让Client能够发起连接和发起断开连接,给网络节点配置了独立的TCP/IP Stack,也就是CAN…...

FastGPT部署和接入使用重排模型bce-reranker-base

bce-reranker简介 bce-reranker 是一种专门用于信息检索和自然语言处理领域中的重排序(reranking)模型。这种模型由北京智源人工智能研究院(BAAI)开发,是 BGE(BAAI General Embedding)系列的一部分。BGE 系列模型专注于提供通用的嵌入表示,而 bce-reranker 则更进一步…...

Android笔试面试题AI答之线程Handler、Thread(2)

答案仅供参考&#xff0c;来自 讯飞星火大模型 目录 1.Android多线程间通信和多进程之间通信有什么不同&#xff0c;分别怎么实现?2.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系&#xff1f;3.Android 线程间通信有哪几种方式?4.子线程发消息…...

某某物联rabbitmqhttp二轮充电桩协议充电协议对接

对接方式概述&#xff1a; 1&#xff09;请求采用 http 协议方式&#xff0c;推送数据采用 amqp(默认 rabbitmq)点对点消息队 列方式。 2&#xff09;消息队列连接信息&#xff0c;需贵方完善。 1 hostIp&#xff1a; 2 virtualHost&#xff1a; 3 userName&#xff1a; 4 pass…...

黑马JavaWeb企业级开发(知识清单)03——HTML实现正文:排版(音视频、换行、段落)、布局标签(div、span)、盒子模型

文章目录 前言一、正文排版1. 视频标签: < video >2. 音频标签: < audio >3. 换行标签: < br >4. 段落标签 < p >5. vscode实现 二、布局1. 盒子模型2. 布局标签< div >和< span >3. VScode实现 三、源代码和运行结果总结 前言 本篇文章是…...

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…...

Django REST Framework(十三)视图集-GenericViewSet

Django REST Framework 中&#xff0c;ModelViewSet 和 ReadOnlyModelViewSet 提供了快速实现常见视图操作的便捷方法。它们分别继承自 GenericViewSet 并组合了多个 Mixin 类&#xff0c;使得视图的编写变得更加简单。 ModelViewSet ModelViewSet 继承自 GenericViewSet&…...

《0基础》学习Python——第二十四讲__爬虫/<7>深度爬取

一、深度爬取 深度爬取是指在网络爬虫中&#xff0c;获取网页上的所有链接并递归地访问这些链接&#xff0c;以获取更深层次的页面数据。 通常&#xff0c;一个简单的爬虫只会获取到初始页面上的链接&#xff0c;并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获…...

Python Pygame制作简单五子棋游戏

代码参考自&#xff1a;https://blog.csdn.net/weixin_43918046/article/details/119521845 新增功能&#xff1a;1任意棋盘大小&#xff1b;2.任意棋子连线 # 棋盘大小 [670, 670] # 棋盘行列 15*15 import pygame from pygame.locals import QUIT, KEYDOWN import numpy as…...

JS+H5在线文心AI聊天(第三方接口)

源码在最后面 调用的不是文心官方接口 可以正常聊天 有打字动画 效果图 源代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...