update 0.6.5

This commit is contained in:
2026-09-30 08:56:49 +08:00
parent d9f9b2a90f
commit 016aee57ee
30 changed files with 2471 additions and 7 deletions
@@ -0,0 +1,65 @@
using UnityEngine;
namespace XericLibrary.Runtime.UIGraph
{
/// <summary>
/// 曲线进度条的播放驱动器:把时间推成 UISplineCurveRenderer 的进度。
/// 只负责"进度从哪来",几何与着色全在渲染器那一侧。
/// </summary>
[AddComponentMenu("Xeric Library/UI/UISplineProgressDriver", 18)]
[RequireComponent(typeof(UISplineCurveRenderer))]
public class UISplineProgressDriver : MonoBehaviour
{
/// <summary>自动推进(关掉就只认手动 SetProgress)</summary>
public bool autoDrive = true;
/// <summary>从 0 走到 1 所需秒数</summary>
[Min(0.01f)]
public float duration = 2.5f;
/// <summary>用 scaledTime,随引擎暂停/缩放</summary>
public bool useUnscaledTime = false;
/// <summary>走到尽头后往返还是从头再来</summary>
public bool pingPong = false;
/// <summary>起始进度</summary>
[Range(0f, 1f)]
public float startProgress = 0f;
private UISplineCurveRenderer m_Renderer;
private float m_Elapsed;
private void Awake()
{
m_Renderer = GetComponent<UISplineCurveRenderer>();
m_Elapsed = startProgress * duration;
if (m_Renderer != null)
m_Renderer.SetProgress(startProgress);
}
private void Update()
{
if (!autoDrive || m_Renderer == null)
return;
m_Elapsed += useUnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime;
float cycle = m_Elapsed / duration;
float progress = pingPong
? Mathf.PingPong(cycle, 1f)
: cycle - Mathf.Floor(cycle);
m_Renderer.SetProgress(progress);
}
/// <summary>手动设进度,同时让自动推进从该处继续</summary>
public void SetProgress(float value)
{
value = Mathf.Clamp01(value);
m_Elapsed = value * duration;
if (m_Renderer != null)
m_Renderer.SetProgress(value);
}
}
}