Unity之数据持久化

一、PlayerPrefs

  • 简介:PlayerPrefs 是 Unity 提供的一种轻量级数据存储方案,用于存储简单的键值对数据。通过 PlayerPrefs 存储的数据会持久保存在设备上,即使应用程序关闭也不会丢失。以下是一个示例代码:
// 存储数据
PlayerPrefs.SetString("Name", "John");
PlayerPrefs.SetInt("Age", 18);
PlayerPrefs.SetFloat("Height", 1.8f);

// 读取数据
string name = PlayerPrefs.GetString("Name");
int age = PlayerPrefs.GetInt("Age");
float height = PlayerPrefs.GetFloat("Height");

// 删除数据
PlayerPrefs.DeleteKey("Name");

  • 优点:使用简单,适合存储简单的数据,比如玩家设置、游戏配置等。
  • 缺点:存储的数据只能是基本类型,无法存储复杂的数据结构;存储的数据易被修改,不适合存储敏感信息。

二、文件存储

  • 简介:可以使用 C# 中的文件操作来进行数据的存储和读取。常见的文件格式有 XML、JSON、二进制等。以下是一个使用 JSON 文件存储数据的示例代码:
using System.IO;
using UnityEngine;
using Newtonsoft.Json;

// 定义数据结构
public class PlayerData
{
    
    
    public string Name;
    public int Age;
    public float Height;
}

// 存储数据
PlayerData data = new PlayerData {
    
     Name = "John", Age = 18, Height = 1.8f };
string path = Application.persistentDataPath + "/player.json";
string json = JsonConvert.SerializeObject(data);
File.WriteAllText(path, json);

// 读取数据
string json = File.ReadAllText(path);
PlayerData data = JsonConvert.DeserializeObject<PlayerData>(json);
string name = data.Name;
int age = data.Age;
float height = data.Height;

// 删除数据
File.Delete(path);

  • 优点:可以存储复杂的数据结构,适合存储游戏中的场景、角色等数据。
  • 缺点:需要进行文件读写操作,较为繁琐;存储的数据易被修改,不适合存储敏感信息。

三、数据库存储

可以使用 C# 中的 SQLite 或者 Unity 自带的 ORM 工具来进行数据的存储和读取。以下是一个使用 SQLite 存储数据的示例代码:

using UnityEngine;
using System.Data;
using Mono.Data.Sqlite;

// 连接数据库
string connectionString = "URI=file:" + Application.persistentDataPath + "/game.db";
IDbConnection dbConnection = new SqliteConnection(connectionString);
dbConnection.Open();

// 创建表
IDbCommand dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = "CREATE TABLE IF NOT EXISTS player (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, height REAL)";
dbCommand.ExecuteNonQuery();

// 插入数据
dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = "INSERT INTO player (name, age, height) VALUES ('John', 18, 1.8)";
dbCommand.ExecuteNonQuery();

// 查询数据
dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = "SELECT * FROM player";
IDataReader reader

当然更多的是使用MYSQL数据库,可以参考这篇博客:
mysql数据库连接

  • 优点:
    • 可以存储大量的数据,适合存储游戏中的场景、角色、任务等数据;
    • 数据存储在磁盘中,不易被篡改,比 PlayerPrefs 和文件存储更安全;
    • 支持多种查询操作,方便进行数据分析和统计;
    • 支持事务操作,可以保证数据的一致性和完整性。
  • 缺点:
    • 使用数据库需要额外学习和掌握相关的知识和技能,相对于 PlayerPrefs 和文件存储更加复杂;
    • 数据库存储需要额外的服务器资源支持,如果是单机游戏,可能会增加游戏的启动时间和运行时间;
    • 数据库存储的效率可能会受到磁盘 IO、网络传输等因素的影响,比如在移动设备上可能会出现卡顿的情况;
    • 数据库存储需要进行备份和维护,维护成本较高。

四、总结

对于需要存储大量数据、需要多种查询操作或者需要保证数据一致性和安全性的游戏项目,使用数据库进行数据持久化是一个较为不错的选择。但是对于数据量较小、查询操作较少的游戏项目,则可以选择使用 PlayerPrefs 或者文件存储等方式来进行数据持久化。

猜你喜欢

转载自blog.csdn.net/Xz616/article/details/130638779