UGUI实现直播间聊天消息滚动功能
2017-03-20 11:34
357 查看
如今直播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插件来实现。
需求功能是:观众新发送了聊天消息会把之前的消息顶到上面,用户也可以通过滚动聊天栏翻看之前的用户聊天记录。
先看下面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; } #endregion if (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 }
相关文章推荐
- 聊天功能,实现:每增加一条消息整体往上移动,滚动查看聊天记录
- 用直播(推拉流)模拟实现视频聊天功能(iOS)
- 使用dwr3.0实现服务端向浏览器做消息推送,做滚动评论或弹幕效果,而且根据视频id做推送消息拦截功能
- 直播项目,在线聊天功能--socket实现客户端和服务器端通讯的简单案例
- JavaScript实现QQ聊天消息展示和评论提交功能
- 用直播(推拉流)模拟实现视频聊天功能(iOS)
- 用直播(推拉流)模拟实现视频聊天功能(iOS)
- java WebSocket实现聊天消息推送功能
- ASP.NET中实现MSN通知消息功能
- 用DirectShow实现QQ的音视频聊天功能
- ASP.NET中实现MSN通知消息功能
- ASP.NET中实现MSN通知消息功能
- ASP.NET中实现MSN通知消息功能
- ASP.NET中实现MSN通知消息功能
- ASP.NET中实现MSN通知消息功能
- 用DirectShow实现QQ的音视频聊天功能
- ASP.NET中实现MSN通知消息功能 选择自 qdzx2008 的 Blog
- ASP.NET中实现MSN通知消息功能
- 用DirectShow实现QQ的音视频聊天功能
- 实现游戏开发中的屏幕滚动功能