文字跑马灯效果//
using UnityEngine;
using UnityEngine.UI;
public class PaoMaDengText : MonoBehaviour
{
public Text pmdText; //跑马灯text.
public float speed = 2f;//移动速度
RectTransform childRectTransform;
RectTransform parentRectTransform;
private void Start()
{
childRectTransform = pmdText.transform.GetComponent<RectTransform>();
parentRectTransform = pmdText.transform.parent.GetComponent<RectTransform>();
}
private void FixedUpdate()
{
// 沿着当前物体的前方移动
pmdText.transform.Translate(Vector3.left * speed);
// 获取子物体的边界
Rect childBounds = GetBounds(childRectTransform);
// 获取父物体的边界
Rect parentBounds = GetBounds(parentRectTransform);
// 检查子物体的最右边是否离开了父物体的最左边
bool isOutside = childBounds.xMax < parentBounds.xMin;
if (isOutside)
{
Debug.Log("子物体的最右边离开了父物体的最左边");
// 将子物体最左边与父物体最右边对齐
float offset = parentBounds.xMax - childBounds.xMin;
Vector3 newPosition = childRectTransform.position + new Vector3(offset, 0f, 0f);
childRectTransform.position = newPosition;
}
}
/// <summary>
/// 获取UI边界
/// </summary>
private Rect GetBounds(RectTransform rectTransform)
{
Vector3[] corners = new Vector3[4];
rectTransform.GetWorldCorners(corners);
float minX = corners[0].x;
float maxX = corners[2].x;
float minY = corners[0].y;
float maxY = corners[2].y;
return new Rect(minX, minY, maxX - minX, maxY - minY);
}
}