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

一、概述

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

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

方法跨平台支持读写能力适合场景特点
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.xdnf.cn/news/1546767.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件&#xff1a; 如何检查两个给定的线段是否相交&#xff1f; c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

PG duckdb插件 pg_quack部署与使用

一.pg_quack简介 pg_quack 是一个创新的 PostgreSQL扩展&#xff0c;它将 DuckDB-—一个嵌入式列式数据库 管理系统集成到PostgreSQL中。这个开源项目为开发者提供了一种在同一个数据 库环境中利用高性能数据处理和存储的新方式,使得在PostgreSQL在OLAP的性能 上得到了很大的提…

Spring Boot 进阶-第一个程序HelloWorld

从我们学习编程语言开始,每次入门一个语言都是从Hello World开始,当然这里我们也不例外。首先从一个简单的HelloWorld程序开始。 既然是要学着做Java Web开发,那么首先需要了解的就是如何去编写一个RESTFul风格的接口,这里我们就需要引入一个pom的依赖。 <dependency&g…

Django设计批量导入Excel数据接口(包含图片)

Django设计批量导入Excel数据接口(包含图片) 目录 Django设计批量导入Excel数据接口(包含图片)示例xlsx文件接口详情前端上传FormData后端APIView调用函数 Django 4.2.7 openpyxl 3.1.5示例xlsx文件 接口详情 前端上传FormData …

自动驾驶规划算法(一):A*算法原理和代码(c++与python)

1. A*算法简介 A*算法&#xff08;A-star algorithm&#xff09;诞生于1968年&#xff0c;由彼得哈特&#xff08;Peter Hart&#xff09;、尼尔森尼尔森&#xff08;Nils Nilsson&#xff09;和伯特拉波特&#xff08;Bertram Raphael&#xff09;三位计算机科学家提出。它的…

基于大数据可视化的图书推荐及数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

快速订餐:Spring Boot 点餐系统

第二章关键技术的研究 2.1相关技术 网上点餐系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言&#xff0c;易于学习&#xff0c;实用且面向用户。全球超过35&#xff05;的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统&#xff0c;因为它的…

WanFangAi论文写作研究生论文写作神器在线生成真实数据,标注参考文献位置,表格公式代码流程图查重20以内,研究生论文开题报告写作技巧

撰写开题报告时&#xff0c;遭循以下结构将有助于你条理清晰地展示你的研究计划: 研究目标 1.研究背景:简要介绍你选择该研究题目的背景&#xff0c;阐述研究的重要性。 2.研究问题:明确阐述你的研究将解决的核心问题。 研究价值 1.理论价值:探讨你的研究在学术领域内的贡献&a…

C语言 | Leetcode C语言题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ //递归遍历树节点&#xff0c;判断是否为有效路径 int dfs(struct TreeNode * root, int ta…

基于RealSense D435相机实现手部姿态重定向

基于Intel RealSense D435 相机和 MediaPipe的手部姿态检测&#xff0c;进一步简单实现手部姿态与机器人末端的重定向。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&#xff0c;并且有一个可以控制的机器人接口。 一、手部姿态重定向介绍 …

【WRF运行第二期(Ubuntu)】ARWpost安装及错误总结

WRF运行第二期&#xff1a;ARWpost安装及错误总结 1 ARWpost介绍2 ARWpost安装2.1 ARWpost_V3安装前准备2.2 安装ARWpost2.3 修改Makefile文件2.4 修改configure.arwp文件2.5 生成可执行文件EXE另&#xff1a;报错1-Error: Type mismatch between actual argument at (1) and a…

【项目】基于Linux和C++的动态在线视频点播系统设计

文章目录 1. 前言1.1 源码1.2 项目简介1.3 实现内容1.4 涉及技术 / 环境 2. 整体架构2.1 服务器功能2.2 服务器结构 3. 前提步骤3.1 思路分析3.2 创建视频表 4. 后端 基本功能实现&#xff08;视频点播&#xff09;4.1 服务端工具类实现4.2 日志输出类4.3 数据库/表 管理类4.4 …

前端开发之代理模式

介绍 代理模式是一种结构型设计模式&#xff0c;它通过为一个对象提供一个代理对象来控制对该对象的访问。代理对象可以在访问真实对象之前或之后添加一些额外的操作。 class RealImg {fileName: string;constructor(fileName: string) {this.fileName fileName;}disPlay()…

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN

优化java中 HashMap 的容量](capacity值)

我们很多人都知道&#xff0c;分配比我们所需更多的内存可能会对应用程序的性能产生负面影响。因此&#xff0c;使用带有容量的构造函数创建列表可能会产生很大的不同。 但是&#xff0c;使用Maps时&#xff0c;这个优化步骤可能不是那么简单。在本文中&#xff0c;我们将学习…

Django 基础之启动命令和启动配置修改

Django启动 django启动一般可以通过ide或者命令启动 ide启动&#xff1a; 启动命令&#xff1a; python manage.py runserver该命令后续可以增加参数&#xff0c;如&#xff1a; python manage.py runserver 8081 python manage.py runserver 127.0.0.1:8082 注意&#xff1…

PDF转换器哪个好?这5款PDF工具值得推荐

PDF转换器哪个好&#xff1f;选择一款优质的PDF转换器&#xff0c;能够极大地提升我们的工作效率与灵活性。它不仅能轻松实现PDF文件与Word、Excel、PPT等多种格式间的互转&#xff0c;还支持图片、TXT等多种格式的转换&#xff0c;满足多样化的办公与学习需求。此外&#xff0…

南卡首款耳夹开放式耳机,舒适与音质双双达行业峰值,再次“颠覆”行业!

近日&#xff0c;南卡Ultra夹耳式蓝牙耳机的正式上市&#xff0c;再次在蓝牙耳机圈内掀起波澜。这款耳机以其超舒适的夹耳式设计和卓越音质&#xff0c;为用户带来了全新的音乐体验&#xff0c;有望重新定义夹耳式耳机的市场标准。 南卡品牌背后有着强大的研发实力和丰富的行业…

一文读懂Service以及实践攻略

一文读懂Service以及实践攻略 目录 1 一文读懂 Kubernetes Service 以及实践攻略 1.1 1. 什么是 Service&#xff1f; 1.1.1 为什么需要 Service&#xff1f; 1.2 2. Service 的工作原理 1.2.1 核心概念1.2.2 流量转发过程 1.3 3. Service 的几种类型及应用场景 2 实践&#…

网络与信息安全工程师(工信部教育与考试中心)

在当今数字化时代&#xff0c;大量的敏感信息与业务流程在网络上传输和处理&#xff0c;使得网络与信息安全成为保障企业运营、政务管理以及金融交易等关键领域不可忽视的一环。 因此&#xff0c;对网络安全专家的需求日益增长。 例如&#xff0c;金融机构、大型电信运营商以…