SQLite4Unity3d是一种基于sqlite-net进行封装的unity包,适用在iOS,Mac,Android和Windows项目中工作,适用于中大型游戏

 

项目架构

传统unity序列化数据共有几种方案,包括使用本地持久化类 PlayerPrefs,使用Json方法、使用XMl方法,但以上几种方案有使用上限制,修改自由化,规模化使用限制等问题,而传统SQLite又存在各种限制,因此提供一种SQLite4Unity3d数据库的解决方案

 

SQLite4Unity3d使用有以下优点:

  1. 修改方便,由于使用SQLite,可使用db工具进行快速修改查询
  2. 使用场景广泛,建立好框架后,后续如果需要切换联网服务器模式,可轻松切换,无需重新建立框架
  3. 数据储存规范,适用于大型场景,多人协作交互方便

但由于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;
    }
}

 

修改unityplayer游戏数据_数据库

 

这样对数据库使用other_sheet进行序列化,用other_exp_sheet_GET 进行反序列化,这样就可以储存自定义类型

 

简单的SQLite4Unity3d使用教程

筛选

 

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<数据元类>();