Excal数据转化成Asset数据文件
我们知道,在Unity当中的文件都可以称之为Asset文件,在项目开发当中需要把数据读取来之后存放起来,而有的数据是不可以改变的,今天就来写一个demo处理一下这些数据,在这里就不写读取Excal数据的方法了,如果需要了解就百度一下,关于这样的帖子和文章有很多
首先我们需要一个类来“模仿”一下Excal数据,可以定义一下类:
using UnityEngine; using System.Collections; /// <summary> /// 数据类 /// </summary> [System.Serializable] public class ItemData { //换句话说就是每一行就是一个类 public string id; public string name; public int addAttack; public int addHp; public int addDefense; }
因为一个Excal里面有很多行,也就是说有很多类,所以这一个类是满足不了我们的,我们需要吧数据读出来之后把数据放起来,在这里我用的是List。如下:
using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// 存放Asset数据 /// </summary> public class ItemDataList : ScriptableObject { public List<ItemData> itemData; //表示一个Excal表格 }
紧接着就是生成数据了,如下,需要说明的是,此类事编辑器类,需要放在Editor里面,把下面的脚本放在Unity里面之后会在Unity的菜单栏里面出现一个Demo-CreateAsset,单击一下就可以生成Asset数据了,该数据是放在Resources,所以前提是需要有一个Resources文件,点击生成的文件就可以看到数据了
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; /// <summary> /// 把数据打包成为Asset文件 /// </summary> public class CreateAssetData { [MenuItem("Demo/CreateAsset")] static void CreateAsset() { ItemDataList list = ItemDataList.CreateInstance<ItemDataList>(); list.itemData = DataTest(); AssetDatabase.CreateAsset(list,"Assets/CreateAsset/Resources/ItemData.asset"); } public static List<ItemData> DataTest() //测试数据 { List<ItemData> data = new List<ItemData>(); for (int i = 0; i < 20; i++) { ItemData d = new ItemData(); d.id = "000" + i; d.name = "000" + i; d.addHp = i; d.addDefense = i*2; d.addAttack = i*3; data.Add(d); } return data; } }
最后就是用这些数据了,因为之前我是在Resources里面放着的,所以我是用Resources类来加载数据,如下,
using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// 加载数据 /// </summary> public class AssetLoad : MonoBehaviour { [SerializeField] private List<ItemData> itemData; void Awake() { StartCoroutine(LoadAssetData()); } IEnumerator LoadAssetData() { ItemDataList list = Resources.Load<ItemDataList>("ItemData"); itemData = list.itemData; yield return null; } }
附:也可以把该数据打包成AssetBundle文件,然后用WWW类来加载,之后转化成为ItemDataList类型就可以拿到数据了。另外这个数据打成Asset文件之后就一定固定了,不能再改变了。