SQLite4Unity3d是一种基于sqlite-net进行封装的unity包,适用在iOS,Mac,Android和Windows项目中工作,适用于中大型游戏
项目架构
传统unity序列化数据共有几种方案,包括使用本地持久化类 PlayerPrefs,使用Json方法、使用XMl方法,但以上几种方案有使用上限制,修改自由化,规模化使用限制等问题,而传统SQLite又存在各种限制,因此提供一种SQLite4Unity3d数据库的解决方案
- 修改方便,由于使用SQLite,可使用db工具进行快速修改查询
- 使用场景广泛,建立好框架后,后续如果需要切换联网服务器模式,可轻松切换,无需重新建立框架
- 数据储存规范,适用于大型场景,多人协作交互方便
但由于SQLite本身特性,数据类型仅支持字符串,数字原始类型,因此如果像对结构类数据经常序列化储存,需要建立新的框架进行转换
搭建
GitHub - robertohuertasm/SQLite4Unity3d:SQLite make easy for Unity3d
下载数据包,将SQLite.cs存放在你得脚本文件夹中,之后的所有调用均调用此文件。将Plugins文件夹存放在assets目录下
使用以下代码进行创建及连接
string path = Application.streamingAssetsPath + "/data.db"; public SQLiteConnection SQLiteConnection; SQLiteConnection = new SQLiteConnection(this.path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
SQLite4Unity3d建表非常简单,直接对类进行建表和封装
public class other_sheet { [PrimaryKey, AutoIncrement] public int id { get; set; } public int hp { get; set; } public int level { get; set; } public int exp { get; set; } public string title { get; set; } public string arm_type { get; set; } } SQLiteConnection.CreateTable<other_sheet>();
即可在数据库中建立一个名称叫other_sheet的表
使用db工具可直接对表进行修改,非常方便
但数据类型仅支持字符串,数字原始类型,如需要储存自定义类型,比如我需要建立一个武器类型,则只能使用数据库储存
因此建立一个运行类,用于进行数据处理和转换
public enum Armstype { knife, Lightsaber, oilbarrel, m1, m4, m9 } public class other_exp_sheet_GET : GET { static public ExpOther _GET(int level) { ExpOther ExpOther = new ExpOther(); var other_sheet = sQL_Sk5.SQLiteConnection.Table<other_sheet>().Where(_ => _.level == level).FirstOrDefault(); ExpOther.level = other_sheet.level; ExpOther.hp = other_sheet.hp; ExpOther.exp = other_sheet.exp; ExpOther.title = other_sheet.title; ExpOther.arm_type = (Armstype)Enum.Parse(typeof(Armstype), other_sheet.arm_type); return ExpOther; } }
这样对数据库使用other_sheet进行序列化,用other_exp_sheet_GET 进行反序列化,这样就可以储存自定义类型
筛选
Connection.SQLiteConnection.Table<数据元类>().Where(_ => _.id == id).FirstOrDefault();
数据提取后临时存放由TableQuery<T> 来存放,以下是常用方法
名称 | 解释 |
First | 获得匹配的第一个 |
FirstOrDefault | 获得匹配的第一个如果没有匹配到则返回第一个 |
Last | 获得匹配的最后一个 |
LastOrDefault | 获得匹配的最后一个如果没有匹配到则返回第一个 |
Count | 获取所有匹配存在的数量 |
Take | 获取匹配对象的前10个 |
ToList<>() | 将获取的表按元类转换成列 |
插入
Connection.SQLiteConnection.Insert(数据元类);
更新
说明:首先从数据库中提取数据,然后经过转换成游戏内部可以运行的数据,修改后再转换成数据元类进行储存,可以将转换过程写成方法,简化过程
var temp = Connection.SQLiteConnection.Table<数据元类>().Where(_ => _.id == id).FirstOrDefault(); Connection.SQLiteConnection.Update(_TODB(数据元类)); static public 数据元类 _TODB(数据运行类 player_info){}
删除
Connection.SQLiteConnection.Delete<数据元类>();
标签:ExpOther,sheet,数据库,SQLite4Unity3d,unity,other,SQLiteConnection,public From: https://www.cnblogs.com/xyfbj/p/17516881.html