本文主要是介绍[Unity]跑马灯广播,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
效果:
布局:背景图片添加Mask
Text 我这里用的是TextMeshPro 设置成Overflow
接下来就是代码的编写了。首先说一下思路:1 、设置text的起始位置在如图2的1位置处,text的末尾在2处。使用DoTween动画进行移动。
2 、咱们知道队列的特色是先进先出,因此用到了队列和协程,只有当前消息播放完毕以后才会播放下条消息。
代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using DG.Tweening;
public class EntertainingDiversions : MonoBehaviour
{[SerializeField]private TMP_Text m_TxtMsg;private Queue<String> m_MsgQueue;private bool isScrolling = false;void Start(){this.m_MsgQueue = new Queue<string>();AddMsg("adscdvrfhtjyiukio8l9;9;9;9;fhgd,hg,gh,hg,h");//测试}void AddMsg(string msg){this.m_MsgQueue.Enqueue(msg);if (this.isScrolling) return;StartCoroutine(this.Scrolling());}IEnumerator Scrolling(){float beginX = 400;//背景图片的宽度/2float leftX = -400;while (m_MsgQueue.Count > 0){float duration = 10f;float speed = 200f;int loop = 3;string msg = m_MsgQueue.Dequeue();//队列是先进先出m_TxtMsg.text = msg;float txtWidth = m_TxtMsg.preferredWidth;//文本自身的长度.Vector3 pos = m_TxtMsg.rectTransform.localPosition;float distance = beginX - leftX + txtWidth;//要移动到的末尾位置duration = distance / speed; //1400/200=700 持续时间isScrolling = true;while (loop-- > 0){Debug.Log(loop);m_TxtMsg.rectTransform.localPosition = new Vector3(beginX, pos.y, pos.z);m_TxtMsg.rectTransform.DOLocalMoveX(-distance, duration).SetEase(Ease.Linear);yield return new WaitForSeconds(duration);}yield return null;}isScrolling = false;gameObject.SetActive(false);yield break;}
}
这篇关于[Unity]跑马灯广播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!