Unity3D 如何读取策划给定的Excel表格详解

前言

Unity3D是一款非常流行的游戏开发引擎,它可以帮助开发者快速构建游戏并进行测试和发布。在游戏开发过程中,策划经常会提供一些Excel表格,这些表格包含了游戏中的各种数据,如角色属性、技能效果等等。那么,如何在Unity3D中读取这些Excel表格呢?本文将详细介绍Unity3D如何读取策划给定的Excel表格,并给出技术详解以及代码实现。

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!

一、Excel表格的读取

Unity3D并没有原生支持Excel表格的读取,因此需要使用第三方插件来实现。目前比较常用的插件有ExcelDataReader和NPOI。这两个插件都可以读取Excel表格中的数据,但是使用方法略有不同。

1.ExcelDataReader

ExcelDataReader是一款轻量级的Excel读取器,它可以读取Excel 97-2003和Excel 2007格式的文件。使用ExcelDataReader的步骤如下:

(1)在Unity项目中导入ExcelDataReader插件的dll文件。

(2)编写读取Excel表格的代码。

如下是一个简单的读取Excel表格的示例代码:

using System.IO;
using ExcelDataReader;
using UnityEngine;public class ExcelReader : MonoBehaviour
{public string filePath;private void Start(){//读取Excel文件FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//读取表格数据while (excelReader.Read()){for (int i = 0; i < excelReader.FieldCount; i++){Debug.Log(excelReader.GetValue(i));}}//释放资源excelReader.Close();stream.Close();}
}

其中,filePath为Excel表格的路径。在Start函数中,首先使用FileStream打开Excel文件,然后使用ExcelReaderFactory创建一个ExcelDataReader对象。接着,使用Read函数逐行读取Excel表格中的数据,并使用GetValue函数获取每个单元格的值。最后,释放资源。

2.NPOI

NPOI是一款功能强大的Excel读写库,它支持Excel 97-2003和Excel 2007格式的文件。使用NPOI的步骤如下:

(1)在Unity项目中导入NPOI插件的dll文件。

(2)编写读取Excel表格的代码。

如下是一个简单的读取Excel表格的示例代码:

using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using UnityEngine;public class ExcelReader : MonoBehaviour
{public string filePath;private void Start(){//读取Excel文件FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);IWorkbook workbook = null;if (Path.GetExtension(filePath) == ".xls"){workbook = new HSSFWorkbook(stream);}else if (Path.GetExtension(filePath) == ".xlsx"){workbook = new XSSFWorkbook(stream);}//读取表格数据ISheet sheet = workbook.GetSheetAt(0);for (int i = 0; i <= sheet.LastRowNum; i++){IRow row = sheet.GetRow(i);for (int j = 0; j < row.LastCellNum; j++){Debug.Log(row.GetCell(j));}}//释放资源workbook.Close();stream.Close();}
}

其中,filePath为Excel表格的路径。在Start函数中,首先使用FileStream打开Excel文件,然后根据文件扩展名创建一个Workbook对象。接着,使用GetSheetAt函数获取第一个表格,并使用GetRow和GetCell函数获取每个单元格的值。最后,释放资源。

二、代码实现

以上是读取Excel表格的基本步骤,下面给出一个完整的示例代码。在这个示例中,我们将读取一个包含角色属性的Excel表格,并将角色属性显示在屏幕上。

Excel表格的格式如下:

名称等级生命值攻击力防御力
小兵1100105
英雄15005020

1.创建一个空的Unity项目,并导入ExcelDataReader插件。

2.创建一个Excel表格,并将其命名为“Role”。

3.在Excel表格中填写角色属性,并保存表格。

4.创建一个Cube对象,并将其命名为“RoleDisplay”。

5.在Hierarchy面板中创建一个空的GameObject对象,并将其命名为“ExcelReader”。

6.将以下脚本附加到“ExcelReader”对象上:

using System.IO;
using ExcelDataReader;
using UnityEngine;
using UnityEngine.UI;public class ExcelReader : MonoBehaviour
{public string filePath;public GameObject roleDisplay;private void Start(){//读取Excel文件FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//读取表格数据while (excelReader.Read()){string name = excelReader.GetString(0);int level = excelReader.GetInt32(1);int hp = excelReader.GetInt32(2);int attack = excelReader.GetInt32(3);int defense = excelReader.GetInt32(4);//创建角色属性显示GameObject display = Instantiate(roleDisplay, Vector3.zero, Quaternion.identity);display.transform.SetParent(transform);display.transform.localPosition = new Vector3(0, -30 * transform.childCount, 0);//设置角色属性display.transform.Find("Name").GetComponent<Text>().text = name;display.transform.Find("Level").GetComponent<Text>().text = "等级:" + level;display.transform.Find("HP").GetComponent<Text>().text = "生命值:" + hp;display.transform.Find("Attack").GetComponent<Text>().text = "攻击力:" + attack;display.transform.Find("Defense").GetComponent<Text>().text = "防御力:" + defense;}//释放资源excelReader.Close();stream.Close();}
}

其中,filePath为Excel表格的路径,roleDisplay为角色属性的显示预制体。在Start函数中,首先使用FileStream打开Excel文件,然后使用ExcelReaderFactory创建一个ExcelDataReader对象。接着,使用GetString和GetInt32函数获取Excel表格中的数据,并使用Instantiate函数创建角色属性的显示。最后,释放资源。

7.在Assets目录下创建一个名为“RoleDisplay”的文件夹,并将角色属性的显示预制体保存在该文件夹中。

8.将预制体的名称设置为“RoleDisplay”,并将其添加一个Canvas组件和一个ContentSizeFitter组件。

9.在预制体中添加五个Text组件,分别用于显示名称、等级、生命值、攻击力和防御力。

10.在场景中运行游戏,可以看到角色属性的显示已经被创建。

三、总结

本文介绍了Unity3D如何读取策划给定的Excel表格,并给出了使用ExcelDataReader和NPOI两个插件的示例代码。读取Excel表格可以帮助开发者在游戏开发过程中更方便地管理游戏数据,提高开发效率。同时,本文还给出了一个完整的示例,演示了如何将Excel表格中的数据显示在屏幕上。希望本文可以帮助读者更好地理解Unity3D的开发流程。

附:视频教程

Unity 框架设计(四) 基于Excel数据驱动框架​www.bycwedu.com/promotion_channels/1335729689​编辑

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

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

相关文章

谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用

12 月 14 日消息&#xff0c;美国时间周三&#xff0c;谷歌宣布了一系列升级的人工智能&#xff08;AI&#xff09;功能&#xff0c;旨在为其云计算客户提供更好的服务。这家科技巨头正试图赶上竞争对手&#xff0c;比如微软和 OpenAI&#xff0c;它们都在积极利用人工智能的热…

Axure自定义元件

目录 1.processOne的使用 ​编辑2.自定义元件的使用、 2.1如何自定义一个元件 2.2使用自定义元件 导语&#xff1a; Axure是绘制原型图的软件&#xff0c;但是我们很多时候不知道&#xff0c;画哪一个板块&#xff0c;所以流程图的绘制也是非常重要的 1.processOne的使用…

【图论】普利姆算法,最小生成树

一次加入一个节点到我们的最下生成树中。加入哪个&#xff1f;跟着下面的步骤走一遍你就会了。 1. 把第一个节点A添加进来 2. 看两条边<A,B>,<A,E>,一个长度是3&#xff0c;一个长度是4&#xff0c;把长度短的边的另一个节点添加进来&#xff0c;也就是B 3. 再看A,…

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

超详细 | 哈里斯鹰优化算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F9 在MATLAB中执行程序结果如下&#xff1a; 在Python中执行程序结果如下&#xff1a; 哈里斯鹰优化算法(Harris Hawks Optimization , HHO)是 Heidari等[1]于2019年提出的一种新型元启发式算法&#xff0c;设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突…

flume系列之:监控flume agent channel的填充百分比

flume系列之:监控flume agent channel的填充百分比 一、监控效果二、获取flume agent三、飞书告警四、获取每个flume agent channel的填充百分比一、监控效果 二、获取flume agent def getKafkaFlumeAgent():# 腾讯云10.130.112.60zk = KazooClient(hosts

Java中Math.ceil()​和 ​Math.floor()​

​​Math.ceil()​和 ​Math.floor()​是Java中用于取整的数学方法。 区别如下&#xff1a; ​​Math.ceil()​: 向上取整。 该方法返回一个大于或等于参数的最小整数值。如果参数是正数&#xff0c;则返回大于或等于该数的最小整数。如果参数是负数&#xff0c;则返回不小于该…

Web3.0和WebAssembly

1.Web3.0!WebAssembly WebAssembly&#xff08;Wasm&#xff09;并不等同于Web 3.0&#xff0c;它们是两个不同的概念。 WebAssembly是一种低级的编程语言&#xff0c;旨在提供高性能、可移植、安全的二进制指令集&#xff0c;用于在web上执行的应用程序。它是为了改善web应用…

Redis过期淘汰策略

一. Redis过期淘汰策略 当Redis已用内存超过maxmemory限定时&#xff0c;触发主动清理策略。 主动清理策略在Redis 4.0之前一共实现了 6 种内存淘汰策略&#xff0c;在 4.0 之后&#xff0c;又增加了 2 种 策略&#xff0c;总共8种&#xff1a; 针对设置了过期时间的key做处理…

Day60力扣打卡

打卡记录 1682分了记录下&#xff0c;希望下回能突破1700捏。作为一个菜鸟&#xff0c;知道自己很菜&#xff0c;一步步走到现在还是很开心的&#xff0c;从以前的周赛稳定1题到稳定2题&#xff0c;到现在的时有时无的3题。每次刷题都期盼有所长进&#xff0c;虽然更多的时候收…

【C语言】字符串函数及其模拟实现

这是最好的时代&#xff0c;这是最坏的时代&#xff0c;我们一无所有&#xff0c;我们巍然矗立 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 系列文章目录…

OpenSSL的源码在哪里下载?

官方网站去下载&#xff0c;网址&#xff1a; https://www.openssl.org/source/ 比较老的版本的下载页面地址&#xff1a; https://www.openssl.org/source/old/ 由于某面板的OpenSSL模块的安装配置语句如下&#xff1a; --with-openssl/root/rpmbuild/BUILD/openssl-1.0.2u所…

2-2基础算法-Nim和/前缀和/差分

文章目录 一.Nim和二.前缀和&区间和三.差分 一.Nim和 Nim游戏是一个数学策略游戏&#xff0c;通常涉及两名玩家轮流从几堆物品&#xff08;如石子或饼干&#xff09;中取走一定数量的物品。每个玩家每次可以从任意一堆中取走任意数量的物品&#xff0c;但必须至少取走一个…

使用qt实现四则运算计算机项目

这是我们要包含的头文件 #include <QWidget> #include<QStack> #include<string.h> #include<string> 这是我在ui界面创建的计算机基础框架。 接下来要实现按住每个按钮在白框内显示&#xff1b; 因此我们要定义一个QString 类型的变量 QString e…

Linux系统上64位ATT汇编语言多个源文件计算两个数的平方

运行程序的环境 sudo lsb_release -a看到操作系统是Ubuntu 22.04 LTS。 sudo uname -r看到内核版本是5.15.0-86-generic。 sudo as --version看到as的版本是2.38。 sudo ld --version看到ld的版本是2.38。 sudo gcc --version看到gcc版本是11.2.0。 sudo gdb --version看到gdb…

Yum仓库架构解析与搭建实践

1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1&#xff09;挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2&#xff09;查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3&#xf…

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…

go mod 模式下安装beego

要在您的项目中使用Go modules来安装beego&#xff0c;您可以按照以下步骤进行操作&#xff1a; 确保您的Go版本在1.11或更高版本。您可以在终端中运行go version命令来检查您的Go版本。 创建一个新的文件夹作为您的项目根目录&#xff0c;并导航到该目录。 运行以下命令来初…

学生选课系统基础版

目录 一.Java 中的集合框架&#xff08;上&#xff09; 1.Java中的集合框架概述 2.Collection接口&接口简介 3.学生选课——创建学生类和课程类 4.学生选课——添加课程Ⅰ 5.学生选课——添加课程Ⅱ 6.学生选课——课程查询 7.学生选课——课程修改 8.学生选课——课程删…