【Unity基础】Unity中跨平台使用SQLite(一)

news/2024/11/17 7:37:12/

一、概述

游戏中数据存储方案众多,在进行选择时,除了要考虑数据类型外,还要考虑对于跨平台的支持。

对于数据存储方案将在单独文章里介绍,下面只是总结了不同方案的特点。

方法跨平台支持读写能力适合场景特点
Resources优秀只读小型项目,静态资源加载简单方便,Unity 自动管理
StreamingAssets中等只读大型文件(音频、视频、配置文件等)保留原始文件格式,路径平台相关
PersistentDataPath优秀读写用户数据、存档、设置持久化存储,适合存档和用户数据
ScriptableObject优秀只读配置数据、静态游戏数据Unity 原生支持,内存优化
SQLite/数据库中等读写大量结构化数据管理,复杂查询强大数据管理功能,需第三方支持
REST API / 云存储优秀读写

本系列文章将重点介绍如何在跨平台项目中使用SQLite做为数据存储方案。

这里的跨平台指的是Windows, Mac, Linux, iOS, Android,WebGL,基本上覆盖主流平台。

在查找过程中,AssetStore上有一些支持SQLite的插件,但都是收费的,而许多文章里提到的SQLite4Unity3d,SQLiteUnityKit, sqlite-unity-plugin等已经许多年不更新维护了。

现在在Github上找到最新的一个插件是unity-sqlite-net,这是一位巴西的游戏开发者在维护。

本系列文章就是基于这个插件进行介绍的。

这个插件支持的平台包括Windows, Linux, macOS, iOS, tvOS, visionOS, Android 和WebGL。

二、安装Unity-sqlite-net插件

安装方法有多种:

  • 使用openupm 注册表并使用openupm-cli安装此包:
openupm add com.gilzoide.sqlite-net
  • 使用Unity 包管理器进行安装,网址如下:
https://github.com/gilzoide/unity-sqlite-net.git#1.0.1
  • Assets克隆此存储库或直接在项目或文件夹中下载它的快照Packages

https://github.com/gilzoide/unity-sqlite-net

三、运行示例代码

在Unity项目中添加下面的脚本,并在场景中创建一个空对象并挂载这个脚本,运行后可以通过Log查看运行记录。

using SQLite;
using UnityEngine;// 该库包含一些简单的属性,您可以使用它们来控制表的构造,ORM 样式
public class Player
{[PrimaryKey, AutoIncrement]public int Id { get; set; }public string Name { get; set; }
}public class TestSQLite : MonoBehaviour
{void Start(){// 1. 创建与数据库的连接。// 特殊的“:memory:”内存数据库// 还支持“file:///somefile”等 URIvar db = new SQLiteConnection($"{Application.persistentDataPath}/MyDb.db");// 2. 定义实体后,您可以通过调用 CreateTable 自动在数据库中生成表db.CreateTable<Player>();// 3. 您可以使用 Insert 在数据库中插入行// Insert 调用填充 Id,该 Id 标记为 [AutoIncremented]var newPlayer = new Player{Name = "gilzoide",};db.Insert(newPlayer);Debug.Log($"Player new ID: {newPlayer.Id}");// 对于更新和删除也存在类似的方法。// 4.a 查询数据的最直接方法// 是使用 Table 方法。这可以使用谓词// 通过 WHERE 子句进行约束和/或添加 ORDER BY 子句var query = db.Table<Player>().Where(p => p.Name.StartsWith("g"));foreach (Player player in query){Debug.Log($"Found player named {player.Name} with ID {player.Id}");}// 4.b 您还可以使用 Query 方法进行低级查询var players = db.Query<Player>("SELECT * FROM Player WHERE Id = ?", 1);foreach (Player player in players){Debug.Log($"Player with ID 1 is called {player.Name}");}// 5. 您可以使用 Execute方法对数据库执行低级更新,例如运行 PRAGMA 或 VACUUMdb.Execute("VACUUM");}
}

这段示例代码展示了如何在Unity中使用SQLite进行简单的数据库操作。具体来说:

  1. Player类:定义了一个Player实体,包括一个自增的主键Id和一个Name属性。

  2. TestSQLite类:在Start方法中创建数据库连接,路径为持久数据路径下的"MyDb.db"。

  3. 创建表:使用CreateTable<Player>()自动生成Player表。

  4. 插入数据:创建一个新玩家并插入数据库,自动填充Id。

  5. 查询数据

    • 使用Table方法通过条件查询玩家,输出符合条件的玩家信息。
    • 使用Query方法进行更低级的查询,获取Id为1的玩家。
  6. 执行命令:最后使用Execute方法执行VACUUM命令,优化数据库。


http://www.ppmy.cn/news/1530784.html

相关文章

网站自动识别使用设备

现在有一个需求是&#xff0c;写了两组页面&#xff0c;进行渲染&#xff0c;一组是pc端&#xff0c;另外一组是移动端&#xff0c;要自动匹配当前设备进行渲染 解决方案 1.通过 navigator.userAgent来判断当前的设备 例子 <script>document.write("用户代理: &…

专题七_分治_快排_归并_算法专题详细总结

目录 分治 一、分治思想的概念 二、分治思想的步骤 1. 颜⾊分类&#xff08;medium&#xff09; 解析&#xff1a; 2. 快速排序&#xff08;medium&#xff09; 解析&#xff1a; 总结&#xff1a; 3. 快速选择算法&#xff08;medium&#xff09; 解析&#xff1a; …

Ai产品经理

从通用类产品经理转行到智能硬件产品经理&#xff0c;虽然都是产品经理&#xff0c;但是即跨越行业也跨越了职业类别。通用类的产品经理工作一般都会完整的经历市场调研、用户研究、产品策略、商业模式、营销、运营以及其他一系列相关的产品管理。转型到智能硬件行业&#xff0…

LVS与nginx的区别

文章目录 一、优势比较二、配置复杂度三、工作层次 一、优势比较 性能: LVS&#xff1a;LVS是专门为高性能设计的&#xff0c;它使用内核级别的数据包处理能力&#xff0c;能够提供非常高的吞吐量和低延迟。Nginx&#xff1a;Nginx也具有出色的性能&#xff0c;特别是在处理静态…

Django后台管理复杂模型

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django框架…

网络安全的方方面面

目录 一、网络安全概述二、数据加密三、消息完整性与数字签名四、身份认证五、密钥分发中心(KDC)与证书认证(CA)六、防火墙与入侵检测系统七、网络安全协议八、网络安全攻防 -- 黑客攻击简要流程九、网络安全常用术语 一、网络安全概述 网络安全的基本特征&#xff1a;相对性、…

ChatGPT-4模型镜像站对比和【软件开发人员】提示词

AI如今很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;ChatGPT 真是无所不能~ 作为一款出色的大语言模型&#xff0c;ChatGPT 实现了人类般的对话交流&#xff0c;最主要是能根据上下文进行互动。 接下来&#xff0c;我将介绍 ChatGPT 在…

word2vector训练数据集整理(代码实现)

import math import os import random import torch import dltools from matplotlib import pyplot as plt #读取数据集 def read_ptb():"""将PTB数据集加载到文本行的列表中"""with open(./ptb/ptb.train.txt) as f:raw_text f.read()return…