Unity 好友列表、聊天记录使用本地数据库储存 --SimpleSQL SQLite

这篇具有很好参考价值的文章主要介绍了Unity 好友列表、聊天记录使用本地数据库储存 --SimpleSQL SQLite。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        Unity官方提供提供了插件 SimpleSQL,使用的是SQLite本地数据库的功能,插件这里就不做过多介绍了,移步Unity AssetStore 自行查看吧 SimpleSQL | 整合 | Unity Asset Store

        这里主要讲一下插件的用法和我们在实际开发功能中需要用到的东西

        聊天系统,一台设备用时间长了, 聊天记录肯定会很多,这些数据如果全部储存与服务器上的话,服务器怕是遭不住,所以就需要用的本地数据库了

基础用法

1.SimpleSQL插件导入Unity

2.点击Tools-SimpleSQL-Create Empty Database,会在Asset目录创件一个文件,这个文件是默认的数据库文件,可以预生成一些数据表存于这个基础文件里

3.点击Tools-SimpleSQL-Create SimpleSQL Database Manager ,会在视图中创建一个空物体(DB Manager)

unity sqlite 聊天,unity,游戏引擎

解释下这几个参数都是干嘛用的

  • Database File :默认数据库文件,也就是上面创建的文件
  • Override Base Path :数据库文件存放的目录,不填默认 Application.persistentDataPath目录
  • Change Working Name :运行时会读取的文件,勾选之后填上名称,会将文件改名
  • Overwrite if Exists:运行时用默认数据库文件替换运行时的文件(动态修改的数据库别勾选)
  • Debug Trace:调试数据

一般我们设置是这样的

unity sqlite 聊天,unity,游戏引擎

4.点击Tools-SimpleSQL-Options 设置当前环境,我们用pc端做演示,就选择pc端了,下面的选项是否需要 .Net系统数据包,一般情况下也用不到

unity sqlite 聊天,unity,游戏引擎

好了,到这一步可以先运行一下项目,可以在读写目录看到运行时的sql数据库文件了

unity sqlite 聊天,unity,游戏引擎

好了,下面介绍一下怎么添加,修改,获取数据吧

创建一个c#脚本,获取到场景中的 SimpleSQLManager 对象,我这里命名为 chatDB

public SimpleSQLManager chatDB = null;

检查库中是否有某张表

 //检查库中是否有某张表,没有则创建表
    private void CheckHaveTable<T>(SimpleSQLManager sm)
    {
        // 获取表名
        string tableName = typeof(T).Name;

        // 构建查询语句
        string query = "SELECT name FROM sqlite_master WHERE type='table' AND name=?";

        // 执行查询
        var tableNames = sm.Query<ColumnInfo>(query, tableName);

        if(tableNames.Count <=0)
        {
            CreateTable<T>(sm);
        }

    }

在库中创建表

//在库中创建表
    private void CreateTable<T>(SimpleSQLManager sm)
    {
        sm.CreateTable<T>();
    }

声明数据表结构体

public class LocalDB
{
    [NotNull]
    public int accountId { get; set; }
}

public class LocalChat : LocalDB
{
    //[PrimaryKey]
    public int friendId { get; set; }
    public bool isSpeaker { get; set; }
    public string content { get; set; }
    public long time { get; set; }

}

        这里数据结构基类有一个 accountId ,意义是账号id,不同账号的聊天记录用这个字段区分了

初始化数据库

 private void Start()
    {
        CheckHaveTable<LocalChat>(chatDB);
    }

增加聊天数据

  public void AddChat(int friendId, bool isSpeaker, string content,long time)
    {
        LocalChat chat = new LocalChat
        {
            accountId = AccountID,
            friendId = friendId,
            isSpeaker = isSpeaker,
            content = content,
            time = time
        };
        chatDB.Insert(chat);
    }

删除聊天

 public void DelectChat(int friendId)
    {
        string sql = "DELETE FROM LocalChat WHERE accountId = ? AND friendId = ?";
        chatDB.Execute(sql, AccountID ,friendId);

        //LocalChat chat = new LocalChat
        //{
        //    friendId = friendId,
        //};
        //chatDB.Delete<LocalChat>(chat);
    }

        这里提供了两段代码,用 sql语句和插件提供的方法可自行选择

获取聊天

  public List<LocalChat> QueryChat(int friendId)
    {
        string sql = "SELECT * FROM LocalChat WHERE accountId = ? AND friendId = ? ";
        List<LocalChat> friends = chatDB.Query<LocalChat>(sql, AccountID ,friendId);
        return friends;
    }

基本就这些逻辑了,其他API可自行官网查看,这里只提供一份思路

写一个测试脚本测试一下吧

 private void OnGUI()
    {
        GUI.skin.button.fontSize = 36; 
        GUI.skin.textField.fontSize = 36;

        

        if (GUI.Button(new Rect(200, 0, 200, 100), "添加聊天"))
        {
            TimeSpan mTimeSpan = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0);
            long time = (long)mTimeSpan.TotalSeconds;
            LocalSave.Instance.AddChat(101, true, "聊天内容", time);
        }
        if (GUI.Button(new Rect(200, 100, 200, 100), "删除聊天"))
        {
            LocalSave.Instance.DelectChat(101);
        }
        if (GUI.Button(new Rect(200, 200, 200, 100), "查询聊天"))
        {
            List<LocalChat> chats = LocalSave.Instance.QueryChat(101);
            foreach (LocalChat chat in chats)
            {
                DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(chat.time).LocalDateTime;
                TimeSpan timeOfDay = dateTime.TimeOfDay;
                string formattedTime = timeOfDay.ToString(@"hh\:mm\:ss");

                guitext += $"{(chat.isSpeaker ? "我说" : "他说")} :{chat.content}--{formattedTime}\n"; // ----{friend.friendName} \n";
            }
        }


        guitext = GUI.TextField(new Rect(600, 0, 1000, 800), guitext);
    }

运行项目,点击几次添加聊天,在点击查询聊天就可以看到数据了

unity sqlite 聊天,unity,游戏引擎

下载 DB Browser (SQLite) 软件可以查看数据库的内容,打开软件,把数据库文件拖到软件中打开看一下吧

unity sqlite 聊天,unity,游戏引擎unity sqlite 聊天,unity,游戏引擎

总结下,与好友发生聊天的时候,只需要服务器同步一次给到客户端,客户端在收到聊天消息之后写入本地数据库,服务器则不需要保存这些聊天记录,之后打开与好友的聊天界面,通过好友id和账号id,获取到对应的聊天记录就好了,可通过发送时间等数据进行排序显示

插件官网:https://echo17.itch.io/simplesql-unityhttps://echo17.itch.io/simplesql-unity

DB Browser 下载地址:https://download.sqlitebrowser.org/DB.Browser.for.SQLite-3.12.2-win64.msihttps://download.sqlitebrowser.org/DB.Browser.for.SQLite-3.12.2-win64.msi

注:科学上网文章来源地址https://www.toymoban.com/news/detail-848053.html

到了这里,关于Unity 好友列表、聊天记录使用本地数据库储存 --SimpleSQL SQLite的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 删掉微信聊天记录怎么恢复 ?怎么恢复微信聊天记录?

    这个问题没有确定的答案,因为恢复取决于许多因素,包括删除聊天记录的时间以及使用的设备类型。但是,有几种方法可以成功恢复已删除的微信历史记录,例如使用数据恢复软件或联系客户支持。 如果你想将微信历史转移到另一台设备上,第二种方法非常有用。如果您需

    2024年02月01日
    浏览(55)
  • 聊天——拉去历史记录,保持聊天页面静止

    内容全文高 - 上一次滚动距离 - 本身内容高就是当前位置

    2023年04月09日
    浏览(83)
  • 翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex

    接着上篇内容:翻译: LLM构建 GitHub 提交记录的聊天机器人一 使用 Timescale Vector、pgvector 和 LlamaIndex TSV Time Machine 示例应用有三个页面: Home主页:提供应用程序使用说明的应用程序主页。 Load Data加载数据:页面以加载所选存储库的 Git 提交历史记录。 Time Machine Demo:与加载的

    2024年01月20日
    浏览(72)
  • Java+Vue实现聊天室(WebSocket进阶-聊天记录)

    WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服

    2024年02月11日
    浏览(65)
  • 微信聊天记录数据分析

    目录 一、项目背景 二、数据准备 三、数据预处理及描述性统计 四、数据分析 1.聊天小时、日、月分别汇总分布图 2.聊天时间序列分布图 3.高频词汇统计 4.词云图展示 五、其它探索性分析 2021年2月20日我和我女朋友第一次见面,之后开启了我们两个人的故事,时隔一年我想将

    2024年02月04日
    浏览(75)
  • 怎么恢复微信聊天记录

    微信是一款非常受欢迎的社交软件,它可以让我们轻松跟朋友聊天,分享照片和视频,也可以让我们随时随地了解最新的新闻和信息。然而,如果您丢失了微信聊天记录,你会发现无法恢复。在本文中,我们将介绍 怎么恢复微信聊天记录 。 第一种方法:通过微信自带的 聊天

    2024年02月08日
    浏览(70)
  • 信息搜集-读取微信聊天记录

    在攻防演练的钓鱼上线后,如果被钓的人使用微信,这时候可以通过读取微信里的聊天记录进行进一步搜集。 使用公开Github项目 https://github.com/AdminTest0/SharpWxDump 编译命令:C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe .Program.cs /platform:x86 首先获取微信的Wechatkey ==》找到对应聊天

    2023年04月10日
    浏览(59)
  • python解密微信聊天记录

    链接: 傻瓜教程:使用小米系列手机提取微信聊天记录并制作词云图 链接: 手机端微信聊天记录数据库解密过程

    2024年02月07日
    浏览(138)
  • 微信聊天记录导出(华为手机版)

    关于微信记录导出的有比较多的方法, 在这里进行汇总下, 以下都是经过我亲测可行的, 不要去买一些付费的软件, 自己手动操作下就好啦 主要参考这两篇文章: 微信聊天记录导出为电脑txt文件教程 微信聊天记录导出(2020新版) 具体步骤: 1.先登录电脑版微信 2.备份与迁移, 选择备

    2024年02月09日
    浏览(51)
  • SpringBoot与webSocket实现在线聊天室——实现私聊+群聊+聊天记录保存

    引用参考:原文章地址:https://blog.csdn.net/qq_41463655/article/details/92410518 在此基础上实现对聊天记录的保存。 代码地址:链接:https://pan.baidu.com/s/1IJFZDa4S_DF08773sKJWeA 提取码:jkui 思路:新建一个实体类用于保存聊天记录,在消息发送时,设置对象的各个值然后保存到数据库中。

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包