游戏中的聊天
一般游戏内一般能与好友聊天,世界聊天。但是如果加上陌生人聊天呢?陌生人的头像和昵称如何显示?何时更新?
聊天会话
聊天会话就像是给好友,陌生人,频道聊天包了一层。游戏会话作用有记录群名与群id或对方名字与id,最后聊天时间,是否有消息未读等信息,以便于界面显示与红点逻辑。
游戏会话可分为单聊会话与频道会话。
单聊会话
顾名思义,玩家与好友或者陌生人一对一聊天。频道会话
- 系统频道
推送系统消息,玩家不可在其中发消息 - 群组频道
给在群组中的人推送消息 - 全服频道
全服广播消息
- 系统频道
游戏中的消息类型
一般游戏中的聊天,玩家能发送的消息有以下几种
文字消息与表情消息
文字消息与表情消息在unity中可以用TMP的图文混排实现图片表情消息
图片表情消息记录一下图片的Id即可实现,不能让用户自定义上传图片,还需要监管。语音消息
语音消息需要另接入SDK实现。消息里包含一条语音消息的url,其他玩家点击消息则从SDK服务器下载到本地播放。自定义消息
自定义消息一般是游戏内功能。比如分享游戏英雄或者装备。
聊天中的数据包
a给b发送一条私聊消息,那么这条消息要包含
消息Id:用于保证消息唯一
FromId:发送方Id
ToId:接收方Id
消息类型:确认是属于文字消息,语音消息,自定义消息等类型
消息内容:消息的内容
发送时间:时间戳,用于排序
发送方其他信息,包括名字,头像等,用于更新本地信息。
频道消息则加上了频道id
昵称和头像更新问题
假设a与b是好友,a更新头像与昵称,b可以立即知道。因为a与b互相为好友关系,遍历一下通知很方便。
如果a与b不是好友,a只是与b聊天一次的陌生人,那么a更新头像与昵称,b没必要通知到。
何时更新陌生人昵称和头像呢
当a又与b聊天时,可从聊天的消息中获取a最新的名字和头像,更新本地信息。
当b查看a的资料详情时,也要更新对方的资料。
历史消息中的昵称头像如何更新
在我处理的时候,本地的历史消息中不存放对方昵称与头像,对方的个人信息与历史消息分开存储,显示的时候直接取本地最新信息。