UNITY学习笔记:读取CSV文件并转存数据

CSV是一种简单、实用的文件格式,用于存储和表示包括文本、数值等各种类型的数据。其显著特点是:文件内的数据以逗号 , 分隔,呈现一个表格形式。

在进行游戏制作时我们会需要使用到表格信息,如物品的名字,价格,序号等。可以在CSV文件中很方便的进行编辑和修改。

要对CSV文件进行读取还是比较简单的,我们可以将其以文本的形式打开来读取。

//打开文件EnemyData.csv
TextAsset EnemyDatas = Resources.Load<TextAsset>("DataAssets/EnemyData");
//Resources.Load 默认打开的是工程Assets/Resources
//也就是说这里的代码实际上访问路径为:Assets/Resources/DataAssets/EnemyData
//文件不用加后缀

因为文件内的数据以逗号 , 分隔来组成表格,每一行数据的结尾都是换行符"/n",我们首先可以按行分割数据,再将结果存在数组当中。

string[] str_row = EnemyDatas.text.Split("\n");
Debug.Log("str_row.Length");
//这里会发现行数比实际行数要多1,这是因为CSV文件末尾有一个空白行

然后再通过以逗号按列分割再存入数组当中就可以直接用了,但是这样的话在使用的时候我们不清楚数据是拿来做什么的,还得去翻原始表格。而且每次使用时都要先读取一次,不太方便。于是下面打算给他读取之后存起来。

于是在这里先建立两个类,按照表格的内容给每个元素分配一个简单好辨识的名字,在实际工程中我通过summary为每个变量注释了一下,更好分辨其作用,起名字就可以很随意了。

[System.Serializable]//序列化
public class Enemy
{
    public string Id;//序号
    public string Name;//名字
    public string Jianjie;//简述
    public uint health;//基础血量
    public uint wuli;//物理抗性
    public uint yuansu;//元素抗性
    public string lujin;//预制体路径
    public uint FirstTime;//生成时间条件
    public uint gailv;//生成概率(权重
}
public class EnemyManager : ScriptableObject
{
    public Enemy[] dataArray;
}

做好上面的部分之后我们只需要将数据转移再生成文件就好了

 贴一张读取的代码

public static Enemy[] ReadCSV()
{
    //以文本方式获取CSV
    TextAsset EnemyDatas = Resources.Load<TextAsset>("DataAssets/EnemyData");
    //分割行
    string[] str_row = EnemyDatas.text.Split("\n");
    int rowNum = str_row.Length - 1;
    //第二行开始才是数据
    Enemy[] enemy_array = new Enemy[rowNum - 1];
    for (int i = 1; i < rowNum ; i++)
    {
        string[] collect = str_row[i].Split(",");
        Enemy enemy = new Enemy();
        //解析每列的数据
        enemy.Id = collect[0];
        enemy.Name = collect[1];
        enemy.Jianjie = collect[2];
        enemy.health = uint.Parse(collect[3]);
        enemy.wuli = uint.Parse(collect[4]);
        enemy.yuansu = uint.Parse(collect[5]);
        enemy.lujin = collect[6];
        enemy.FirstTime = uint.Parse(collect[7]);
        enemy.gailv = uint.Parse(collect[8]);
        enemy_array[i - 1] = enemy;
    }
    return enemy_array;
}

然后利用objectscript类存起来就好了,下面是生成文件的代码。这里是将文件放在了Assets/Resources/DataAssets路径下名为Enemy的Asset文件当中。

    public static void CreateEnemyAsset()
    {
        EnemyManager enemyManager = ScriptableObject.CreateInstance<EnemyManager>();
        enemyManager.dataArray = ReadCSV();
        string assetPath = string.Format("{0}{1}.asset", "Assets/Resources/DataAssets/", "Enemy");
        AssetDatabase.CreateAsset(enemyManager, assetPath);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }

这样做完后我们在更变CSV文件后只需要读取一次数据,以后只用去使用转存后的数据了。还可以利用哈希表制作索引帮助读写文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值