1. UGUI 實現跑馬燈效果

    2021-03-10 10:25發布

    跑馬燈,這個功能在游戲中還是很常見的,,,

    注意要使用Mask,遮擋走出去的文字(掛載到背景上,代碼和要滾動的文字作為其子物體的組件)

    1

    using DG.Tweening;

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    using UnityEngine.UI;


    /// <summary>

    /// 跑馬燈文字設置

    /// </summary>

    public class PaoMaDengText : MonoBehaviour {


        [SerializeField]

        private  Text pmdText;     //跑馬燈text.

        private Queue<string> pmdQueue;     //跑馬燈隊列.

        private bool isEnd = false;   //判斷當前text中的跑馬燈是否跑完.


        private void Start()

        {

            if(pmdText == null) pmdText = this.GetComponent<Text>();

            Init();

        }


        public void Init()

        {

            pmdQueue = new Queue<string>();

            AddMessage(pmdText.text);

        }


        /// <summary>

        /// 添加跑馬燈文字...

        /// </summary>

        /// <param name="msg">文字內容</param>

        public void AddMessage(string msg)

        {

            if (!gameObject.activeSelf)

            {

                gameObject.SetActive(true);

                Init();

            }

            

            pmdQueue.Enqueue(msg);    

            if (isEnd) return;

            StartCoroutine(Marquee());

        }


        public IEnumerator Marquee()

        {

            float begin_X = 200;  //第一個字開始的位置 

            float end_X = 200; 


            while (pmdQueue.Count > 0)

            {

                Vector3 pos = pmdText.rectTransform.localPosition;


                float duration = 10f;  //默認時間

                float speed = 100f;    //滾動速度

                int loop = 3;          //循環次數


                string msg = pmdQueue.Dequeue();

                pmdText.text = msg;

                float txetWidth = pmdText.preferredWidth;  //文本的長度...

                float distance = begin_X - end_X + txetWidth;   //自己體會...

                duration = distance / speed;


                isEnd = true;

                //Debug.Log("distance:" + -distance + " speed:" + speed + " duration:" + duration);


                while (loop-- > 0)//todo 看需求... (loop > 0)

                {

                    pmdText.rectTransform.localPosition = new Vector3(begin_X, pos.y, pos.z);  //歸位...


                    pmdText.rectTransform.DOLocalMoveX(-distance, duration).SetEase(Ease.Linear);  //滾動...

                    yield return new WaitForSeconds(duration);

                }

                yield return null;

            }

            isEnd = false;

            gameObject.SetActive(false);

            yield break;

        }

        private void OnDisable()

        {

            StopAllCoroutines();

        }

    }




    ————————————————

    版權聲明:本文為CSDN博主「妳是我改卟了的bug」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

    原文鏈接:https://blog.csdn.net/Czhenya/article/details/82769703



    日日摸夜夜添夜夜添无码,free性欧美极度另类,超清中文乱码字幕在线观看,真人美女两腿张开露PP图片