前言
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表格的格式如下:
名称 | 等级 | 生命值 | 攻击力 | 防御力 |
小兵 | 1 | 100 | 10 | 5 |
英雄 | 1 | 500 | 50 | 20 |
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的开发流程。