zoukankan      html  css  js  c++  java
  • 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文件之后就一定固定了,不能再改变了。

  • 相关阅读:
    Excel导出
    上传进度基础
    git基本使用
    git学习记录
    Composer 扩展包安装方法
    selected多次点击不生效
    ajaxFileUpload的data数据带pre标签
    php-resque 简单的php消息队列
    git checkout 报错 refname 'origin/branch-name' is ambiguous
    MySQL单独存放表空间Innodb_file_per_table
  • 原文地址:https://www.cnblogs.com/ZhiXing-Blogs/p/5572487.html
Copyright © 2011-2022 走看看