41 lines
1.0 KiB
C#
41 lines
1.0 KiB
C#
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<RectTransform>();
|
|
trail = GetComponent<TrailRenderer>();
|
|
uiCamera = GetComponentInParent<Canvas>().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();
|
|
}
|
|
} |