组件关系
- 父组件:加了一个遮罩。

- 文本组件:将文本组件对齐到父组件的最右边,同时设置禁用 wrapping。

代码
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace LZGood
{
public class TextMarquee : MonoBehaviour
{
public TextMeshProUGUI textMeshPro;
public float speed = 50f;
private RectTransform rectTransform;
private float startX;
private float endX;
private void Awake()
{
Settings();
SetText(textMeshPro.text);
}
public void SetText(string text)
{
textMeshPro.text = text;
Invoke(nameof(Settings), 0.1f);
}
private void Settings()
{
rectTransform = textMeshPro.GetComponent<RectTransform>();
startX = rectTransform.anchoredPosition.x;
float textWidth = textMeshPro.rectTransform.rect.width;
float parentWidth = ((RectTransform)rectTransform.parent).rect.width;
endX = -(textWidth + 100);
rectTransform.anchoredPosition = new Vector2(0, rectTransform.anchoredPosition.y);
}
void Update()
{
rectTransform.anchoredPosition += Vector2.left * speed * Time.deltaTime;
if (rectTransform.anchoredPosition.x < endX)
{
float parentWidth = ((RectTransform)rectTransform.parent).rect.width;
rectTransform.anchoredPosition = new Vector2(parentWidth, rectTransform.anchoredPosition.y);
}
}
}
}