如今直播APP火的简直不像样子了。在直播间里会有观众和主播交流的功能。主要方式是主播动口(说),观众动手(打字)。这篇文章讲解一下观众客户端聊天功能的实现。这里为了更清楚的看到效果功能,我做了一个客户端单机版来讲解。(该版本为unity5.3.2f1)
需求功能是:观众新发送了聊天消息会把之前的消息顶到上面,用户也可以通过滚动聊天栏翻看之前的用户聊天记录。

先看下面gif图功能:

下面讲如何实现:
第一:整个功能我分了三个组件,一个蓝色背景image,一个用来滑动的image(上图图中的黄色光芒图片),一个text的预设物体。(如下图:)
为了方便将这三个物体的pivot都设置为(0,0)。
如下图(根据需求可自定义大小坐标等):

第二:给蓝色背景图片添加滑动组件和Mask组件,指定滑动目标为光芒的那个图片。
添加脚本slidertext,然后把text的预设和预设生成的父物体(光芒的那个图片)拖到对应位置。
如下图:

第三:脚本slidertext的源码:(这才是重点)
该代码和之前我写的弹幕生产的方法相似(弹幕方法链接http://www.manew.com/thread-95590-1-1.html)

脚本里实现了两种文本移动方法:一种是直接跳到上面的位置,另个是缓慢移动上去(上面gif图的样子),缓慢移动使用了DoTween插件来实现。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System;public class productsliderm : MonoBehaviour
{public GameObject Textslidermessage, Textslidermessage_parents;private GameObject texts;//生成的物体public Queue<GameObject> Textslider_queue = new Queue<GameObject>();//物体的队列(生成物体)  private Vector3 textpositon;private Quaternion textrotation;private string content;//文字内容(ceshi)float production_timer = 2;//生成的时间间隔void Update(){#region//仅测试用production_timer -= Time.deltaTime;if (production_timer <= 0f){int i = UnityEngine.Random.Range(0, DanMuStrings.Length);//弹幕的随机内容content = DanMuStrings[i];createDanMuEntity(content);production_timer = 2;}#endregionif (Textslider_queue.Count > 100)//退出队列方法一{GameObject go = Textslider_queue.Peek();Textslider_queue.Dequeue();Destroy(go);//销毁弹幕}}public void createDanMuEntity(string textMsg){texts = (GameObject)(Instantiate(Textslidermessage, textpositon, textrotation));//生成text框if (texts != null){texts.transform.SetParent(Textslidermessage_parents.transform);texts.transform.localScale = new Vector3(1, 1, 1);textrotation.eulerAngles = new Vector3(0, 0, 0);texts.transform.localRotation = textrotation;texts.transform.localPosition = new Vector3(0, 0, 0);texts.GetComponent<Text>().text = textMsg;if (texts.GetComponent<DOTweenAnimation>() == null)//移动组件添加texts.AddComponent<DOTweenAnimation>();if (Textslider_queue.Count >= 1){foreach (GameObject textssliders in Textslider_queue.ToArray())//凡是在队列中的每一个都要移动{Debug.Log("fouzei++++" + texts.GetComponent<RectTransform>().sizeDelta.y);//直接移动//textssliders.transform.localPosition= new Vector3(textssliders.transform.localPosition.x, textssliders.transform.localPosition.y + texts.GetComponent<RectTransform>().sizeDelta.y, 0f);#region //缓缓移动 Vector3 kk  = new Vector3(textssliders.transform.localPosition.x, textssliders.transform.localPosition.y + texts.GetComponent<RectTransform>().sizeDelta.y, 0f);textssliders.transform.DOLocalMove(kk, 2,true);#endregion}}Textslider_queue.Enqueue(texts);//添加到队列}}[HideInInspector]#region 测试用public string[] DanMuStrings ={"这个剧情也太雷人了吧!","还是好莱坞的电影经典啊,这个太次了还是好莱坞的电影经典啊,这个太次了","是电锯惊魂的主角,尼玛","这个游戏还是很良心的么","卧槽还要花钱,这一关也太难卧槽还要花钱,这一关也太难了卧槽还要花钱,这一关也太难了卧槽还要花钱,这一关也太难了了","这个游戏好棒偶","全是傻逼","求约:13122785566","最近好寂寞啊,还是这个游戏好啊是胸再大点就更是胸再大点就更是胸再大点就更","难道玩游戏还能撸","办证:010 - 888888","为什么女主角没有死?","好帅呦,你这个娘们儿","欠揍啊,东北人不知道啊","我去都是什么人啊,请文明用语还是好莱坞的电影经典啊,这个太次了是胸再大点就更","这个还是不错的","要是胸再大点就更好了","这个游戏必须顶啊","还是好莱坞的电影经典啊,这个太次了还是好莱坞的电影经典啊,这个太次了怎么没有日本动作爱情片中的角色呢?","好吧,这也是醉了!","他只想做一个安静的美男子!"};#endregion}

UGUI实现直播间聊天消息滚动功能相关推荐

  1. Websocket直播间聊天室教程 - GoEasy快速实现聊天室

    最近两年直播那个火啊,真的是无法形容!经常有朋友问起,我想实现一个直播间聊天或者我想开发一个聊天室, 要如何开始呢? 今天小编就手把手的教你用GoEasy做一个聊天室,当然也可以用于直播间内的互动.全 ...

  2. 直播软件源码开发,直播间内消息系统的实现

    在直播软件源码开发过程中,消息系统是非常关键的,无论是直播间内的消息还是平台内的消息,都关系着用户的使用体验,所以今天我们先用一个简单的"拉"模型搭建一个简单的直播间消息系统. 基 ...

  3. 微信小程序直播间开发抽红包功能

    1.前言 微信小程序直播间开发抽红包功能 微信小程序直播是微信官方提供的商家经营工具,商家可通过在小程序内直播实现用户互动与商品销售的闭环,无需任何的跳转,提高下单转化率,直播更是成为链接商家和消费者 ...

  4. 十几万人同时在线的直播间聊天,如何设计服务端架构?

    问题 以下内容源自oschina的一篇讨论帖: 问题:这是在知乎上看到的关于如何搭建视频直播系统时想到的一个问题,在此不考虑其他直播上的问题,仅考虑聊天系统,一个热门视频直播间人数可能达到几十万人,一 ...

  5. 几十万人同时在线的直播间聊天,如何设计服务端架构?

    一个热门视频直播间人数可能达到几十万甚至上百万人,几十万人发消息,几十万人接收,流量相当惊人,那么服务端要如何设计才能保证系统流畅?本文作者将结合他在网易云信多年IM开发的经验进行深度分析. 推荐阅读 ...

  6. iOS直播间聊天室遇到的问题

    Question: 1.刷新直播间消息机制该用哪种方法?哪一种更加合适? 2.聊天室该如何图文混排? 3.聊天室出现特殊字符临界点不换行?高度计算错误? 4.聊天室该如何加载网络图片? 5.聊天室如何 ...

  7. uniapp微信小程序仿聊天 输入框在软键盘隐藏显示时与底部距离,以及保证聊天消息滚动到底部 的问题以及解决办法

    (本文最后边有完整代码,想先看效果的,可以直接粘贴不会报错) 一.先说输入框 1.输入框和键盘紧贴着,也就是计算 输入框在键盘隐藏显示时 距离底部的距离,我让输入框外边的盒子固定定位,给bottom一 ...

  8. android仿YY直播间侧滑清屏功能

    1. 需求 YY手机直播可以通过侧滑把直播间里的一些无关的元素清除,只显示视频区域和一些主要的显示信息,如图: 2. 具体实现 现在参照YY这个功能,自己通过代码实现下. 定义一个FrameLayou ...

  9. iOS直播Liveroom组件,游客,用户多次切换登录同一直播间,消息出现多次重复问题解决...

    byzqk 新版,加入连麦功能,直播的流程修改很多,每次登录都需要登录liveroom组件 期间遇到一个奇葩的问题,就是游客登录组件之后,切换为用户登录,出现im消息重复的问题,一开始以为是游客退出不 ...

最新文章

  1. 20条常见的编码陷阱
  2. 智能摄像头安全风险分析及对策研究
  3. 如何用Python从数据库里面获取数据?4个步骤就能轻松实现
  4. Git_git的诞生
  5. 【前端4】bootstrap:栅格系统,隔行/触摸换色,分页/导航条,模态框/轮播图,旅游首页
  6. excel vba 从入门到精通_VBA词汇-基本元素篇
  7. Spring4.0编程式定时任务配置
  8. c语言中的scanf在java中应该怎么表达,Scanner类。
  9. 信息化与计算机基础课课堂融合,高等学校计算机基础课程多元教学系列教材:网页设计与制作...
  10. 昂达V971四核测评
  11. es6标准入门(第三版)_阮一峰 pdf
  12. et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
  13. 等比数列求和推导及优化
  14. 搭建图像搜索引擎(之0):霍比特人直方图
  15. 麦当劳和肯德鸡的笑话
  16. 基于vue的nuxt框架cnode社区服务端渲染 1
  17. End-to-End Slot Alignment and Recognition for Cross-Lingual NLU(跨语言NLU的端到端槽对齐与识别)
  18. win10睡眠锁定计算机,Win10专业版电脑睡眠和休眠的区别是什么?
  19. 数据结构——图(存储结构)
  20. MFC ODBC数据库操作编程(二)

热门文章

  1. Proteus8.9 VSM Studio GCC编译器仿真STM32F407ZGT6系列012_lcd1602一线屏
  2. 自定义控件学习笔记(五)Canvas 对绘制的辅助——范围裁切和几何变换
  3. 通过Postman实现压力测试
  4. gluPerspective函数和glOrtho函数的具体用法
  5. 保护视力 为设置网页、文本背养眼背景色(win7 txt word pdf ie chrome)
  6. 如何查看外网IP地址
  7. PHP 零基础入门笔记(7):PHP 常用的系统函数
  8. C语言switch中break的作用,C语言switch中break语句的作用
  9. 微信PC端数据库文件解密
  10. 0557-6.1.0-Kerberos环境下SQL客户端DBeaver配置异常分析