Unity 可以使用 SQLite3 数据库,这是开发中非常常见的做法,尤其适用于需要本地存储大量结构化数据的场景(如游戏存档、配置数据、离线内容等)。

实现方式主要有以下几种:

  1. 使用 SQLite 官方 C 库 + C# 封装
    SQLite 本身是用 C 语言编写的,你可以通过 C# 的 P/Invoke 机制调用其动态链接库(.dll 或 .so)。不过这种方式需要自己处理平台兼容性(Windows、macOS、Android、iOS 等)。

  2. 使用现成的 C# 封装库
    更简单的方式是使用第三方封装,例如:

    • Mono.Data.Sqlite:Mono 提供的 SQLite 封装,Unity 早期版本常被使用
    • SQLite-net:轻量级 ORM 库,支持对象关系映射,使用简单
    • SQLite4Unity3d:基于 SQLite-net 针对 Unity 优化的版本
  3. 使用 Unity 资产商店的插件
    资产商店中有许多成熟的 SQLite 插件(如 "SQLite" 或 "Easy SQLite"),这些插件通常已经处理了跨平台问题,开箱即用。

基本使用流程(以 SQLite-net 为例):

  1. 导入相关库到 Unity 项目
  2. 创建数据模型类(对应数据库表结构)
  3. 初始化数据库连接
  4. 执行 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)。