赞
踩
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)
解释下这几个参数都是干嘛用的
一般我们设置是这样的
4.点击Tools-SimpleSQL-Options 设置当前环境,我们用pc端做演示,就选择pc端了,下面的选项是否需要 .Net系统数据包,一般情况下也用不到
好了,到这一步可以先运行一下项目,可以在读写目录看到运行时的sql数据库文件了
好了,下面介绍一下怎么添加,修改,获取数据吧
创建一个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);
- }
运行项目,点击几次添加聊天,在点击查询聊天就可以看到数据了
下载 DB Browser (SQLite) 软件可以查看数据库的内容,打开软件,把数据库文件拖到软件中打开看一下吧
总结下,与好友发生聊天的时候,只需要服务器同步一次给到客户端,客户端在收到聊天消息之后写入本地数据库,服务器则不需要保存这些聊天记录,之后打开与好友的聊天界面,通过好友id和账号id,获取到对应的聊天记录就好了,可通过发送时间等数据进行排序显示
插件官网:https://echo17.itch.io/simplesql-unityhttps://echo17.itch.io/simplesql-unity
注:科学上网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。