unity简单的文字滚动 系统公告效果

项目要做一个系统公告,因为太菜花了将近一天才写出来,场景这样
在这里插入图片描述

就简单的几行

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class WB : MonoBehaviour
{ 
    Vector3 start, end;
    // text预设体
    public GameObject textPrefab;
    // 文本宽度
    float textSizeX;
    //动态创建的文本物体
    GameObject textPref;
    public Transform selectTransform, targetTransform;
    List<string> messageText = new List<string>();
    void Start()
    {
        // 记录初始位置
        start =selectTransform.transform.position;
        textPref = Instantiate(textPrefab, selectTransform.transform);
        //messageText.Add("dawd 253");
        messageText.Add("123456dadf");
        messageText.Add("wwrwfagawawea");
        messageText.Add("大玩过V型看过你");
        textPref.GetComponent<TextPro>().AddText("dawd 253");
    }

    void Update()
    {      
        // 获取运行之后的文本宽度
        textSizeX = textPref.GetComponent<RectTransform>().sizeDelta.x;
        end = new Vector3(targetTransform.transform.position.x - textSizeX, targetTransform.transform.position.y, targetTransform.transform.position.z);
        transform.position = Vector3.MoveTowards(selectTransform.transform.position, end, Time.deltaTime*100);
        // 禁用
        if (Vector3.Distance(selectTransform.transform.position, end) <1f)
        {
            textPref.SetActive(false);
           
            if (!textPref.activeInHierarchy)
            {
                selectTransform.transform.position = start;
                addText(num);
                if (num == messageText.Count)
                {
                    num = 0;
                }
                num++;
                
            }
        }      
    }
    string str;
    int num=1;
    void addText(int num)
    {       
        textPref.SetActive(true);
        for (int i = 0; i < num; i++)
        {
           str= messageText[i];      
        }
        textPref.GetComponent<TextPro>().AddText(str);
    }
}


获取文本长度(这个也可以不加)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextPro : MonoBehaviour
{
    Text Textshow;
    //文字内容
    string Content_Text;
    //文本长度
    int textLength;
    //文本
    //public GameObject go;
    //第几行
    int Rowindex = 1;
    void Start()
    {
        Textshow = this.GetComponent<Text>();
        //Textshow.GetComponent<RectTransform>().sizeDelta = new Vector2(200 * Rowindex,53f );
        //AddText("1");
        //获取文字内容
        Content_Text = gameObject.GetComponent<Text>().text;
        //文本真实字节长度
        textLength = System.Text.Encoding.Default.GetBytes(Content_Text).Length;
        //显示文字内容
        Textshow.text =Content_Text;
    }
    public void AddText(string str)
    {
        Debug.Log(str);
        gameObject.GetComponent<Text>().text = str;
       
    }
    void Update()
    {
        //当文字的长度大于每行text限定的字数
        if (textLength > 10)
        {
            //判断文字需要几行
            Rowindex = textLength / 5;
            //将Text的宽度变成文字需求的宽度
            Textshow.GetComponent<RectTransform>().sizeDelta = new Vector2(100* Rowindex,53f);
        }
    }
   
}


上面那个代码懒得加的话直接改一下这个,反正效果就是让文本框自适应
在这里插入图片描述
将HorizonalOverflow改成overflow

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值