using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(RectTransform), typeof(TrailRenderer))] public class ScreenSpaceTrail : MonoBehaviour { private RectTransform rectTransform; private TrailRenderer trail; private Camera uiCamera; void Start() { rectTransform = GetComponent(); trail = GetComponent(); uiCamera = GetComponentInParent().worldCamera; } void Update() { UpdateTrailPosition(); } void UpdateTrailPosition() { // 将UI坐标转换为世界坐标 Vector3 screenPos = RectTransformUtility.WorldToScreenPoint( uiCamera, rectTransform.position); // 设置Z值在相机近裁剪面稍前方 Vector3 worldPos = uiCamera.ScreenToWorldPoint( new Vector3(screenPos.x, screenPos.y, uiCamera.nearClipPlane + 0.1f)); transform.position = worldPos; } public void ClearTrail() { trail.Clear(); } }