Unity 使用 SQLite3 数据库
Unity 可以使用 SQLite3 数据库,这是开发中非常常见的做法,尤其适用于需要本地存储大量结构化数据的场景(如游戏存档、配置数据、离线内容等)。
实现方式主要有以下几种:
-
使用 SQLite 官方 C 库 + C# 封装
SQLite 本身是用 C 语言编写的,你可以通过 C# 的 P/Invoke 机制调用其动态链接库(.dll 或 .so)。不过这种方式需要自己处理平台兼容性(Windows、macOS、Android、iOS 等)。 -
使用现成的 C# 封装库
更简单的方式是使用第三方封装,例如:- Mono.Data.Sqlite:Mono 提供的 SQLite 封装,Unity 早期版本常被使用
- SQLite-net:轻量级 ORM 库,支持对象关系映射,使用简单
- SQLite4Unity3d:基于 SQLite-net 针对 Unity 优化的版本
-
使用 Unity 资产商店的插件
资产商店中有许多成熟的 SQLite 插件(如 "SQLite" 或 "Easy SQLite"),这些插件通常已经处理了跨平台问题,开箱即用。
基本使用流程(以 SQLite-net 为例):
- 导入相关库到 Unity 项目
- 创建数据模型类(对应数据库表结构)
- 初始化数据库连接
- 执行 CRUD 操作(创建、查询、更新、删除)
例如简单的代码示例:
using SQLite;
using System.IO;
using UnityEngine;
// 数据模型
public class PlayerData
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public int Level { get; set; }
}
public class SQLiteExample : MonoBehaviour
{
private SQLiteConnection db;
void Start()
{
// 数据库文件路径(通常放在 persistentDataPath)
string dbPath = Path.Combine(Application.persistentDataPath, "game.db");
db = new SQLiteConnection(dbPath);
// 创建表
db.CreateTable<PlayerData>();
// 插入数据
db.Insert(new PlayerData { Name = "Player1", Level = 1 });
// 查询数据
var player = db.Get<PlayerData>(1);
Debug.Log($"Name: {player.Name}, Level: {player.Level}");
}
}
使用时需要注意不同平台的文件路径处理和权限设置,特别是在移动平台上,数据库文件通常需要放在可读写的目录(如 Application.persistentDataPath)。