我们制作游戏时,有时会需要使用批量数据。在Excel中编辑处理数据显然比在脚本中逐条输入数据要方便得多,但如何将Excel数据导入Unity使用呢?本文就将向大家介绍一种简单实用的方法。
一、插件
在Unity资源商店里有一些工具,可以用来将Excel数据导入Unity,但是大多数都收费。这里向大家介绍一款小巧实用的免费插件,由mikito开发的Unity Excel Importer。下载地址为: https://github.com/mikito/unity-excel-importer
解压后,可以将其直接拷贝进Unity工程文件的目录使用。
准备好后,在Project窗口中单击右键>Create,如果菜单中出现了ExcelAssetScript选项,就说明插件安装成功了(这时该项目为灰色,这是正常的)。
二、准备Excel文件
和使用其他资源的方法一样,将Excel文件直接拷贝进Assets文件夹即可,这里不多赘述。只有一点要注意,就是表内第一行应为列名,从第二行开始输入对应数据,示例如下:
三、脚本
在导入Excel数据之前,我们需要写两个简单的脚本。
(1)将列名声明为公共变量的脚本
新建一个脚本,格式如下。其中公共变量对应Excel表中的各列列名。类前需要加上[System.Serializable]这个序列化特性,让自定义类型可以被访问。
注意:此处的变量名应与Excel表中的列名相同,否则可能出现数值无法正确导入的情况。
    
    
using System . Collections ; using System . Collections . Generic ; using UnityEngine ; [ System . Serializable ] public class ExcelData { public int ID ; public string name ; public string type ; public int attack ; public int defense ; public int HP ; }
(2)ScriptableObject脚本
现在,右键单击Project文件夹,选择Create>ExcelAssetScript,文件夹中将自动创建一个和Excel文件同名的脚本。打开它,会看到它是一个继承了ScriptableObject的脚本。现在,类中的三行脚本都被注释掉了。我们按照注释,将List<EntityType>中的EntityType替换为刚才创建的类名,然后删掉行前的双斜杠注释符,如下:
    
    
using System ; using System . Collections ; using System . Collections . Generic ; using UnityEngine ; [ ExcelAsset ] public class ExcelData_SO : ScriptableObject { public List < ExcelData > Sheet1 ; // Replace 'EntityType' to an actual type that is serializable. //public List<EntityType> Sheet2; // Replace 'EntityType' to an actual type that is serializable. //public List<EntityType> Sheet3; // Replace 'EntityType' to an actual type that is serializable. }
如果你的Excel表只有Sheet1有数据,那么只删掉第一行的注释符即可。
四、生成ScriptableObject文件
最后,右键单击Project文件夹中的Excel文件,选择Reimport。这时,文件夹中将自动创建一个同名ScriptableObject文件,如下图所示。虽然在Inspector中无法直接编辑这些数据,但是当Excel表格中的数据更新时,这里的数据也会同步更新。
五、应用示例
这里用一个简单示例来说明如何在Unity中调用我们导入的数据。
在Hierarchy窗口中新建一个Panel,并在它下面挂一个Text子物体。创建以下脚本并挂在Panel上。
    
    
using System . Collections ; using System . Collections . Generic ; using UnityEngine ; using UnityEngine . UI ; public class CaiCaiUI : MonoBehaviour { public Text text ; public ExcelData_SO excelData ; // Start is called before the first frame update void Start ( ) { if ( excelData != null ) { text . text = "名称:" + excelData . Sheet1 [ 0 ] . name + " " + "类别:" + excelData . Sheet1 [ 0 ] . type + " " + "攻击力:" + excelData . Sheet1 [ 0 ] . attack + " " + "防御力:" + excelData . Sheet1 [ 0 ] . defense + " " + "生命:" + excelData . Sheet1 [ 0 ] . HP + " " ; } } }
回到Inspector窗口为脚本中的变量赋值。
运行游戏,显示如下:
现在,大家应该已经掌握了如何将Excel中的数据导入Unity了。利用好这个工具,可以让游戏开发事半功倍哦~
Logo

分享前沿Unity技术干货和开发经验,精彩的Unity活动和社区相关信息

更多推荐