using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
public class MySlider : Slider, IBeginDragHandler, IEndDragHandler
{
public Action beiginDrag { get; set; }
public Action endDrag { get; set; }
public Action OnPointerUpHandler;
public void OnBeginDrag(PointerEventData eventData)
{
beiginDrag?.Invoke();
}
public void OnEndDrag(PointerEventData eventData)
{
endDrag?.Invoke();
}
public override void OnPointerUp(PointerEventData eventData)
{
if (OnPointerUpHandler != null) { OnPointerUpHandler(); }
}
}
using UnityEngine;
using UnityEngine.EventSystems;
public class SliderAutoSnap : MonoBehaviour
{
[SerializeField]
private MySlider slider;
void Start()
{
slider.onValueChanged.AddListener(OnSliderValueChanged);
slider.beiginDrag = OnSliderBeginDrag;
slider.endDrag = OnSliderEndDrag;
slider.OnPointerUpHandler = OnPointerUp;
}
void OnSliderValueChanged(float value)
{
// 向上取整,保证每次拖动间隔为0.1
float roundedValue = Mathf.Round(value / 1f) * 1f;
slider.value = roundedValue;
}
/// <summary>
/// 进度条开始拖动
/// </summary>
public void OnSliderBeginDrag()
{
}
/// <summary>
///结束
/// </summary>
public void OnSliderEndDrag()
{
//Debug.Log("结束值:" + slider.value);
}
/// <summary>
///点击
/// </summary>
private void OnPointerUp()
{
Debug.Log("点击:" + slider.value);
}
}