UNITY转存

Awwwwh2072

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

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
[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;//生成概率(权重
}
1
2
3
4
public class EnemyManager : ScriptableObject
{
public Enemy[] dataArray;
}

贴一张读取的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
做好上面的部分之后我们只需要将数据转移再生成文件就好了
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文件当中。

1
2
3
4
5
6
7
8
9
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文件后只需要读取一次数据,以后只用去使用转存后的数据了。还可以利用哈希表制作索引帮助读写文件

(从我的CSDN搬运而来)

  • 标题: UNITY转存
  • 作者: Awwwwh2072
  • 创建于 : 2023-10-09 17:17:55
  • 更新于 : 2025-11-07 15:19:09
  • 链接: https://blog.2star.site/p202310091/
  • 版权声明: 版权所有 © Awwwwh2072,禁止转载。
评论
目录
UNITY转存