Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unity中的数据持久化,使用excel、文件、yaml、xml、json等方式

Unity中的数据持久化,使用excel、文件、yaml、xml、json等方式

原创
作者头像
一凡sir
修改于 2023-08-04 01:54:31
修改于 2023-08-04 01:54:31
2.4K0
举报
文章被收录于专栏:技术成长技术成长

Unity中的数据持久化,可以使用excel、文件、yaml、xml、json等方式。

在Unity中读取和写入Excel文件

可以通过使用一些第三方的库来实现。以下是一个常见的方法:

  1. 首先,下载并导入一个支持Excel文件操作的第三方库,比如EPPlus。你可以从GitHub的EPPlus页面下载最新的版本。
  2. 在Unity中创建一个C#脚本,用于处理Excel文件的读取和写入操作。
  3. 在脚本中引入EPPlus的命名空间。
代码语言:c#
AI代码解释
复制
using OfficeOpenXml;
  1. 要读取Excel文件,首先需要指定要打开的文件路径,并创建一个ExcelPackage对象来读取文件。
代码语言:c#
AI代码解释
复制
string filePath = "路径/文件名.xlsx";
using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
{
    // 在这里对Excel文件进行读取操作
}
  1. 在ExcelPackage对象中,可以通过使用Worksheet和Cells属性来访问Excel文件中的工作表和单元格。可以使用Cells属性的索引来获取单元格的数据。
代码语言:c#
AI代码解释
复制
ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; //获取第一个工作表
string cellData = worksheet.Cells[row, column].Value.ToString(); //获取指定单元格数据
  1. 若要写入Excel文件,可以使用Worksheet和Cells属性获取指定单元格,并为其指定新值。
代码语言:c#
AI代码解释
复制
ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; //获取第一个工作表
worksheet.Cells[row, column].Value = newValue; //设置指定单元格的值

// 如果所有更改都完成,需要将更改保存到Excel文件中
package.Save();

注意事项:

  • ExcelPackage库对于Unity来说是一个DLL文件,所以需要将其放在Assets文件夹中以便Unity识别。
  • 使用EPPlus时,请确保目标Excel文件的格式正确,并且库版本与Unity兼容。

以上是使用EPPlus库在Unity中读取和写入Excel文件的基本方法。

在Unity中,文件操作的异步和同步方式有以下区别:

  1. 同步方式:
    • 同步方式是指文件操作会阻塞程序的执行,直到文件操作完成才会继续执行下面的代码。
    • 在同步方式中,文件操作会立即返回结果(例如读取文件的内容),并将结果存储在变量中供后续使用。
    • 若文件操作需要花费较长时间,使用同步方式可能会导致程序的卡顿,影响用户体验。
  2. 异步方式:
    • 异步方式是指文件操作会在后台执行,不会阻塞程序的执行,可以同时执行其他的任务。
    • 在异步方式中,文件操作不会立即返回结果,而是通过回调函数或者等待异步操作完成后的回调通知来获取结果。
    • 异步方式可以提供更好的用户体验,避免程序卡顿,尤其是当文件操作需要较长时间时。

在以下情况下应该使用异步方式:

  1. 当文件操作需要较长时间时,例如读取大型文件或从网络下载文件时,使用异步方式可以避免程序卡顿,保持用户界面的流畅性。
  2. 当需要同时执行其他任务时,例如同时读取多个文件或执行其他的计算任务,使用异步方式可以提高程序的效率。
  3. 当文件操作需要稍后才能获取结果时,例如在游戏加载场景时异步加载资源,使用异步方式可以让程序继续执行其他任务,而不需要等待资源加载完成。

总而言之,异步文件操作适用于需要长时间执行或需要同时执行其他任务的情况,以提高程序的性能和用户体验。

在Unity中可以使用XML文件进行数据的持久化,基本流程如下:

1. 创建XML文件对象

首先,需要创建一个XML文件对象来保存数据。可以通过System.Xml命名空间中的XmlDocument类来创建。例如:

代码语言:c#
AI代码解释
复制
XmlDocument xmlDoc = new XmlDocument();

2. 写入数据到XML文件

可以使用XmlDocument对象的方法来创建XML文档结构,并将数据写入到文件中。例如,可以创建根节点和子节点,并为子节点添加属性和数据:

代码语言:c#
AI代码解释
复制
// 创建根节点
XmlElement root = xmlDoc.CreateElement("Root");
xmlDoc.AppendChild(root);

// 创建子节点
XmlElement child = xmlDoc.CreateElement("Child");
child.SetAttribute("ID", "1");
child.InnerText = "Data";
root.AppendChild(child);

// 保存XML文件
xmlDoc.Save("path/to/xml/file.xml");

3. 读取XML文件中的数据

可以使用XmlDocument对象的方法来打开XML文件,并读取其中的数据。例如,可以通过标签名和属性名来获取特定的节点和数据:

代码语言:c#
AI代码解释
复制
// 打开XML文件
xmlDoc.Load("path/to/xml/file.xml");

// 获取根节点
XmlElement root = xmlDoc.DocumentElement;

// 获取子节点列表
XmlNodeList childNodes = root.GetElementsByTagName("Child");
foreach(XmlNode childNode in childNodes)
{
    // 获取子节点属性和数据
    string id = ((XmlElement)childNode).GetAttribute("ID");
    string data = childNode.InnerText;
}

通过上述基本流程,可以在Unity中使用XML文件进行数据的持久化,实现数据的读取和写入。

Unity中可以使用YamlDotNet库来读取和写入YAML文件

以下是使用YamlDotNet的示例代码:

代码语言:c#
AI代码解释
复制
using System.IO;
using UnityEngine;
using YamlDotNet.Serialization;

public class YAMLExample : MonoBehaviour
{
    private string filePath = "example.yaml";

    [System.Serializable]
    private class ExampleData
    {
        public string name;
        public int age;
    }

    private void Start()
    {
        // 写入YAML文件
        ExampleData data = new ExampleData();
        data.name = "John";
        data.age = 25;

        string yaml = new SerializerBuilder().Build().Serialize(data);
        File.WriteAllText(filePath, yaml);

        // 读取YAML文件
        string loadedYaml = File.ReadAllText(filePath);
        ExampleData loadedData = new DeserializerBuilder().Build().Deserialize<ExampleData>(loadedYaml);

        Debug.Log("Loaded Name: " + loadedData.name);
        Debug.Log("Loaded Age: " + loadedData.age);
    }
}

在这个示例中,ExampleData类定义了要在YAML文件中进行序列化和反序列化的数据。通过new SerializerBuilder().Build().Serialize(data)可以将数据对象序列化为YAML字符串,通过new DeserializerBuilder().Build().Deserialize<ExampleData>(loadedYaml)可以将YAML字符串反序列化为对象。

YAML文件在数据持久化方面的优势是:

  1. 可读性好:YAML文件使用简洁的文本格式,易于人类阅读和编写,对比其他二进制或XML等数据格式更加友好。
  2. 跨平台性好:YAML文件是平台无关的,可以在不同操作系统和编程语言中读取和写入,非常适合作为数据的存储和交换方式。
  3. 易于维护和更新:由于YAML文件的文本格式易于阅读,因此对于需要手动编辑和维护的配置文件等数据,使用YAML格式更方便修改和更新。
  4. 支持注释:YAML文件支持注释,可以在文件中添加说明和备注信息,提高了文件的可读性和可维护性。

然而,YAML文件也有一些不足之处:

  1. 相比二进制文件存储占用更多空间:由于YAML文件是文本格式,相比二进制文件占用了更多的存储空间。
  2. 反序列化过程相对较慢:相比其他格式(如二进制或JSON),YAML的反序列化过程需要较多的时间和计算资源。
  3. 不支持循环引用和包含类型:YAML文件不支持循环引用和包含类型,这可能限制了某些数据结构和场景的使用。

综上所述,YAML文件在数据持久化方面具有很大的优势,可以提供更好的可读性、跨平台性和易维护性。然而,需要权衡其相对较大的存储空间和反序列化性能上的劣势。

读取JSON文件的过程

在Unity中,可以使用JsonUtility类来读取JSON文件并将其转换为对应的数据结构。

  1. 首先,创建一个数据结构类来表示JSON文件的内容。可以使用C#的数据结构类来定义,例如:
代码语言:c#
AI代码解释
复制
[System.Serializable]
public class MyData
{
    public int id;
    public string name;
    public float value;
}
  1. 读取JSON文件。可以使用File.ReadAllText方法来读取文件内容,然后使用JsonUtility.FromJson<T>方法将JSON字符串转换为对应的数据结构对象。例如:
代码语言:c#
AI代码解释
复制
string jsonText = File.ReadAllText("path/to/yifan-online.com.json");
MyData data = JsonUtility.FromJson<MyData>(jsonText);

写入JSON文件的过程

同样使用JsonUtility类来将数据结构对象写入到JSON文件中。

  1. 先创建一个数据结构对象,用于存储要写入JSON文件的数据。例如:
代码语言:c#
AI代码解释
复制
MyData data = new MyData()
{
    id = 1,
    name = "Unity",
    value = 3.14f
};
  1. 然后将数据结构对象转换为JSON字符串。可以使用JsonUtility.ToJson方法将数据转换为JSON字符串。例如:
代码语言:c#
AI代码解释
复制
string jsonText = JsonUtility.ToJson(data);
  1. 最后将JSON字符串写入文件。可以使用File.WriteAllText方法将JSON字符串写入文件。例如:
代码语言:c#
AI代码解释
复制
File.WriteAllText("path/to/yifan-online.com.json", jsonText);

以上就是在Unity中使用JSON格式进行数据的持久化的过程。读取和写入JSON文件分别使用了JsonUtility.FromJson<T>JsonUtility.ToJson方法,并结合了文件读写的方法进行操作。

在Unity中,二进制读写操作相对于文本读写操作有以下优势和劣势:

优势:

  1. 更快速: 二进制读写操作通常比文本读写操作更快速。这是因为二进制数据以更紧凑的格式存储,所以处理速度更快。
  2. 更小的文件尺寸: 由于二进制数据以二进制形式存储,相比文本数据,二进制文件的尺寸通常更小。这对于需要在网络上传输数据或需要占用较少磁盘空间的场景非常有利。
  3. 更精确的数据表示: 二进制数据可以直接表示和存储各种数据类型,如整数、浮点数等。相比之下,文本数据需要将这些数据类型转化为字符串形式进行存储,因此在数据表示上会有一些损失。
  4. 更适合处理复杂数据结构: 二进制读写操作适用于处理复杂的数据结构,如图形、音频、视频等。这些数据通常包含大量的二进制数据,用文本形式存储会有很大的开销和复杂性。

劣势:

  1. 不可读性: 二进制数据是以计算机可读的形式存储的,因此对于人类来说难以直接读取和理解。相比之下,文本数据以可读的形式存储,易于人类阅读和编辑。
  2. 不可编辑: 二进制数据不像文本数据可以简单地通过文本编辑器进行修改。需要对二进制数据进行专门的解析和处理,才能进行修改。
  3. 平台兼容性: 二进制数据的格式可能因操作系统和硬件等平台的不同而有所变化。因此,在不同的平台上读写二进制数据需要更多的考虑和处理,以确保数据的正确解析。

综上所述,二进制读写操作在处理速度、存储空间和数据表示上有一些明显的优势,尤其适合处理复杂的数据结构。然而,对于可读性和可编辑性要求比较高的情况,文本读写操作可能更加合适。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python文件读写操作详解:从基础到实战
Python通过内置的open()函数实现文件操作,该函数接受两个核心参数:文件路径和操作模式。例如,open('data.txt', 'r')表示以只读模式打开当前目录下的data.txt文件。常用模式包括:
富贵软件
2025/08/29
1230
Python文件读写操作详解:从基础到实战
【Unity3D日常】使用Unity3D读取Json、XML、Excel文件
在日常开发中会遇到很多读取文件的操作,最常见的类型还是Json、txt、XML、Excel文件,那么今天就分享一下如何读取这几类文件
恬静的小魔龙
2022/08/07
3.4K0
【Unity3D日常】使用Unity3D读取Json、XML、Excel文件
C#中常用的几种读取XML文件的方法
本文转载:http://www.cnblogs.com/xiaoxiangfeizi/archive/2011/07/29/2120807.html
跟着阿笨一起玩NET
2018/09/18
6.5K0
C#中常用的几种读取XML文件的方法
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
游戏开发小Y
2024/01/18
2.8K0
Unity 数据读取|(二)多种方式读取文本文件
游戏开发小Y
2024/01/18
2K0
Unity 数据存储和读取的案例分享
创建一个 Data 脚本用来序列化和反序列化,需要向这个类中添加需要保存的数据,最后也是需要从这个类中读取保存的数据
用户7718188
2022/11/06
1K0
Python爬虫基础讲解(八):数据持久化——文件操作
计算机的文件,就是存储在某种长期储存设备上的一段数据长期存储设备包括:硬盘、U盘、移动硬盘、光盘...
松鼠爱吃饼干
2021/09/24
4710
【C-文件操作】一文教你如何将代码的数据持久化
每一个正在使用的文件,都在内存中 开辟了相应的文件信息区,来存放文件的相关信息(比如文件名,文件状态,文件当前的位置等等),这些信息是被保存在一个结构体变量FILE中的。
MicroFrank
2023/01/16
8940
Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)
游戏开发小Y
2024/01/18
8590
C#进阶-用于Excel处理的程序集
在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及使用方法。通过对这些程序集的比较和示例代码的演示,读者可以更好地理解如何在C#开发中利用这些工具进行Excel文件的读取、写入和操作。这些程序集提供了丰富的功能和灵活的API,能够满足不同场景下对Excel文件处理的需求,有助于提高开发效率和减少工作量。
Damon小智
2024/03/19
6850
C#进阶-用于Excel处理的程序集
python 文件处理、数据持久化与正则
  数据持久化最简单的类型就是普通文件,有时也叫做平面文件(flat file)。文件是计算机中由OS(操作系统)管理的具有名字的存储区域,在linux系统上,文件被看作是字节序列。
py3study
2020/01/14
7400
以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
最近爱奇艺独播热剧『赘婿』特别火,号主我也在一直追,借助手中的技术,想爬取弹幕分析该剧的具体情况以及网友的评论!
Python研究者
2021/03/05
1.6K0
以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
预备小菜:Python入门之操作文件
然后我们开始读取文件,在Python中提供了一个内置函数open(),它用于打开一个文件,创建一个file 对象,然后可以对file 对象进行读取操作。
马拉松程序员
2023/02/24
4130
预备小菜:Python入门之操作文件
文件服务设计
作为项目的基础模块为各个项目提供统一的文件操作能力,文件服务提供给基础模块调用,基础模块再将其封装对外开放接口。
jerrypxiao
2019/07/02
2.6K0
文件服务设计
数据持久化
数据持久化是将内存中的数据转换为存储模型,以及存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型。存储模型可以使关系模型、XML、二进制流等。cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。
全栈程序员站长
2022/06/30
4530
将图片保存到XML文件的方法
一.保存图片到XML文件 /// <summary> /// 保存图片到XML文件 /// </summary> private void UploadImageToXml() { ///得到用户要上传的文件名 string strFilePathName = loFile.PostedFile.FileName; string strFileName = Path.GetFileName(strFilePathName); int FileLength = loFile.Post
跟着阿笨一起玩NET
2018/09/18
2.9K0
Flutter 应用数据持久化指南
数据持久化是指将应用程序中的数据保存在持久存储介质(如硬盘、数据库等)中的过程。在计算机科学领域,持久化数据是指数据在程序退出或系统关机后仍然存在的能力。这种持久性使得数据可以在不同的应用程序运行周期之间保持不变,以便稍后进行检索、处理和使用。
繁依Fanyi
2024/04/05
1.1K0
YAML文件操作
yaml是一种灵活的数据格式,支持注释、换行符、多行字符串、裸字符等。在自动化测试过程中,很多地方需要使用配置文件存储数据,比如测试环境、数据库、账号信息、日志报告等。
孟船长
2022/04/12
8870
YAML文件操作
Unity 基于excel2json批处理读取Excel表并反序列化
excel2json是一款将Excel表格文件快速生成json和C#数据类的高效插件,详情了解如下:
汐夜koshio
2020/07/28
1.6K0
Unity  基于excel2json批处理读取Excel表并反序列化
Redis的数据持久化
主从同步数据选择的方式-----数据持久化操作  Redis在正常关闭时触发rdb操作
星哥玩云
2022/08/18
4330
推荐阅读
相关推荐
Python文件读写操作详解:从基础到实战
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档