Files
ichni_Official/Assets/Scripts/UI/Base/ModifyValueSlider.cs
SoulliesOfficial 6aa498f6be
2025-08-11 14:04:06 -04:00

53 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Ichni.UI
{
public class ModifyValueSlider : MonoBehaviour, IPointerClickHandler, IDragHandler
{
public ValueModifier valueModifier;
public RectTransform sliderBackground;
public void OnPointerClick(PointerEventData eventData)
{
valueModifier.SetValue(valueModifier.GetNearestValue(GetPercentage(eventData.position)));
}
public void OnDrag(PointerEventData eventData)
{
valueModifier.SetValue(valueModifier.GetNearestValue(GetPercentage(eventData.position)));
}
private float GetPercentage(Vector2 inputPosition)
{
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(sliderBackground, inputPosition, Camera.main, out Vector2 localCursor))
{
// 4. 计算百分比
// localCursor.x 是相对于RectTransform轴心Pivot的x坐标
// 我们需要将其转换为从左边界0%到右边界100%)的百分比
// 获取RectTransform的宽度
float width = sliderBackground.rect.width;
// 将相对于轴心的坐标转换为相对于左边界的坐标
// localCursor.x + rectTransform.pivot.x * width
// 例如如果pivot在中心(0.5)localCursor.x的范围是 -width/2 到 +width/2
// 加上 pivot.x * width (即 0.5 * width) 后,范围就变为 0 到 width
float distanceFromLeft = localCursor.x + sliderBackground.pivot.x * width;
// 计算百分比 (0.0到1.0之间)
float percentage = distanceFromLeft / width;
// 使用Mathf.Clamp01确保结果在0和1之间防止点击到UI外部一点点时出现误差
percentage = Mathf.Clamp01(percentage);
return percentage;
}
return 0f;
}
}
}