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

news2024/9/27 8:22:04

一、概述

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

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

方法跨平台支持读写能力适合场景特点
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”等 URI
        var 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 或 VACUUM
        db.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命令,优化数据库。

参考:

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

2. https://github.com/praeclarum/sqlite-net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169433.html

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

相关文章

java通过webhook给飞书发送群消息

现在使用飞书的人越来越多了&#xff0c;飞书有一个最大的好处&#xff0c;可以使用webhook简便的发送群消息。而在工作中&#xff0c;也经常会因为一些运维方面的工作&#xff0c;需要给飞书发送群消息&#xff0c;来实时提醒相关负责人,及时处理工作。 一、先看一下效果吧&a…

【计算机网络】网络层详解

文章目录 一、引言二、IP 基础知识1、IP 地址2、路由3、IP报文4、IP报文的分片与重组 三、IP 属于面向无连接型四、IP协议相关技术1、DNS2、ICMP3、NAT技术4、DHCP 一、引言 TCP/IP的心脏是网络层。这一层主要由 IP 和 ICMP 两个协议组成。网络层的主要作用是“实现终端节点之…

Visual Studio Code下载安装及汉化

官网&#xff1a;https://code.visualstudio.com/ 按照指示一步步操作即可&#xff1a; 汉化&#xff1a;

Stable Diffusion零基础学习

Stable Diffusion学习笔记TOP12 _插件篇之ControlNet功能篇 ControlNet目前支持的10多种预处理器&#xff0c;根据数据检测种类可分为两种类型&#xff1a; 1、功能型&#xff1a;拥有着不同的能力 2、构图型&#xff1a;控制着SD扩散图形的构图规则 Seg语义分割&#xff1a…

2025年第十届智能信息技术国际会议 (ICIIT 2025)即将召开!

第10届智能信息技术国际会议&#xff08;ICIIT 2025&#xff09;将于2025年2月20日至23日在越南河内举行。ICIIT系列会议将每年举行&#xff0c;为智能信息技术及相关领域提供互动论坛&#xff0c;除了越南的研究人员外&#xff0c;会议小组还欢迎来自世界各地的有兴趣与该地区…

SpringBoot框架快速入门

1、起步依赖 1.概述 在入门案例中&#xff0c;我们引入了web依赖和test依赖&#xff0c;这两个依赖是SpringBoot中的starter依赖&#xff0c;starter依赖也被称为起步依赖 SpringBoot 在配置上相比Spring要简单许多&#xff0c;其核心在于spring-boot-starter&#xff0c;在使…

Django Web开发基础介绍

概述 Django 是后端Python的 Web 开发框架&#xff0c;主要任务是处理与服务器和数据库相关的事务&#xff0c;模板渲染动态生成网页内容只是其中一部分。 Django 内置了的模板引擎&#xff0c;可以将 HTML 页面与 Python 代码进行分离。模板引擎提供了丰富的模板标签和过滤器…

???Ansible-使用roles

文章目录 一、Ansible的内置的或官方推荐创建的目录及文件介绍roles目录解释1、roles/自定义角色名目录下2、roles/自定义角色名目录/tasks目录下3、roles/自定义角色名目录/handlers目录下4、roles/自定义角色名目录/templates目录下5、roles/自定义项目名目录/files目录下6、…

vscode【实用插件】Notes 便捷做笔记

安装 在 vscode 插件市场的搜索 Notes点 安装 安装成功后&#xff0c;vscode 左侧栏会出现 使用 初次使用 需先选择一个本地目录 重启 vscode 后&#xff0c;得到 切换笔记目录 新建笔记 快捷键为 Alt N 默认会创建 .md 文件 配合插件 Markdown Preview Enhanced 预览 .md…

一文讲清CSS基础之浮动float原理

文章目录 前言1、演示基础代码2、块级元素和行级元素都可以开启浮动&#xff0c;开启后不会独占一行3、块级元素独占一行&#xff0c;如果上方有行级元素则空出行级元素的高度4、开启浮动后元素会脱离文档流&#xff0c;浮动流宽高由内容撑开5、浮动元素的宽高也可以设定6、行内…

华为GaussDB数据库(单机版)在ARM环境下的安装指南

一、软件版本 机器配置&#xff1a;8核16G&#xff0c;CPU: Huawei Kunpeng 920 2.9GHz操作系统&#xff1a;EulerOS 2.8 64bit with ARM数据库版本&#xff1a;GaussDB Kernel 505.1.0 build 44f4fa53 二、部署流程 2.1 新建用户 ① 以omm用户为例&#xff0c;添加一个omm用…

使用C#,MSSQL开发的钢结构加工系统

很久以前的项目&#xff0c;上位机使用C#开发。数据库使用mssql。控制系统选用了三菱PLC&#xff0c;上位机和PLC之间走ModbusTCP通讯协议。 主要功能&#xff1a;读取加工文件&#xff08;csv格式&#xff09;&#xff0c;导入到数据库&#xff0c;并根据机床刀具规则&#x…

Python | Leetcode Python题解之第438题找到字符串中所有字母异位词

题目: 题解&#xff1a; class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:s_len, p_len len(s), len(p)if s_len < p_len:return []ans []count [0] * 26for i in range(p_len):count[ord(s[i]) - 97] 1count[ord(p[i]) - 97] - 1differ [c !…

Unity 热更新(HybridCLR+Addressable)-创建Addressable资源

三、创建Addressable资源 创建三个文件夹&#xff0c;放Addressable资源&#xff0c;里面对应放程序集&#xff0c;预制体以及场景 拖拽到Addressable Groups对应组中 其中文件名太长&#xff0c;带着路径&#xff0c;可以简化名字 创建一个脚本&#xff0c;对于这个脚本进行一…

在实时语音交互上超过GPT-4o,端到端语音模型Mini-Omni部署

Mini-Omni是清华大学开源的多模态大型语言模型&#xff0c;具备实时语音输入和流式音频输出的能力。 Mini-Omni模型能够一边听、一边说&#xff0c;一边思考&#xff0c;类似于ChatGPT的语言对话模式。 Mini-Omni模型的主要特点是能够直接通过音频模态进行推理&#xff0c;并…

python全栈学习记录(十六)模块与包

模块与包 文章目录 模块与包一、模块1.模块的导入方式2.模块的循环导入问题3.搜索路径与优先级 二、包1.包的使用2.绝对导入与相对导入 三、一般工程的开发目录规范 一、模块 模块是一系列功能的集合体&#xff0c;常见的模块形式&#xff08;自定义模块、第三方模块、内置模块…

重头开始嵌入式第四十三天(硬件 ARM架构 汇编语言)

目录 ARM架构补充 一&#xff0c;程序状态寄存器 二&#xff0c;处理器工作模式 三&#xff0c;异常处理 四&#xff0c;指令流水线 汇编语言 一&#xff0c;什么是汇编 二&#xff0c;汇编怎么编 三&#xff0c;ARM汇编指令集 四&#xff0c;数据处理指令 五&#…

DC00019基于java swing+sqlserver超市商品信息管理系统java项目GUI商品信息管理系统

1、项目功能演示 DC00019基于java swingsqlserver超市商品信息管理系统java项目GUI商品信息管理系统 2、项目功能描述 基于java swingsqlserver超市管理系统功能 1、系统登录 2、员工管理&#xff1a;添加员工、查询员工、所有员工 3、部门管理&#xff1a;添加部门、查询部门…

数据结构 ——— 移除元素(快慢指针)

目录 题目要求 代码实现&#xff08;快慢指针&#xff09; 题目要求 编写函数&#xff0c;给你一个数组 nums 和一个值 val&#xff0c;你需要在 nums 数组 原地 移除所有数值等于 val 的元素&#xff0c;并且返回移除后数组的新长度 不能使用额外的数组空间&#xff0c;要…

SSM的学习(3)

项目的结构: 如下图所示。 对SqlMapConfig.xml的分析&#xff1a; 是主要的配置文件。里面写的是 数据的配置 1:引入jdbc.properties 这个里面写的是 账号和密码等信息&#xff0c;不在写在xml里面了&#xff0c;防止写死! 用的是<properties resource "这个外部…