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

发布时间 2023-12-14 10:03:21作者: 博毅创为游戏栖息地

前言

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的开发流程。

附:视频教程