using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using TMPro; public class SliderDragHandler : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler { public RectTransform sliderBackground; // Assign in Inspector public float minValue = 2f; public float maxValue = 5f; public float slideareaOffsetMultiplier = 0.9f; public TMP_Text warningText; public float warningThreshholdValue = 0.65f; public float CurrentValue { get; private set; } public ContinuoslocomotionConfigurator configurator; private RectTransform handleRect; private Vector2 backgroundStart; private float backgroundWidth; void Awake() { handleRect = GetComponent(); if (sliderBackground != null) { backgroundStart = sliderBackground.position; backgroundWidth = sliderBackground.rect.width; } } public void OnBeginDrag(PointerEventData eventData) { UpdateSlider(eventData); } public void OnDrag(PointerEventData eventData) { UpdateSlider(eventData); } public void OnEndDrag(PointerEventData eventData) { UpdateSlider(eventData); configurator.UpdateSpeed(CurrentValue); } private void UpdateSlider(PointerEventData eventData) { Vector2 localPoint; RectTransformUtility.ScreenPointToLocalPointInRectangle(sliderBackground, eventData.position, eventData.pressEventCamera, out localPoint); float halfWidth = sliderBackground.rect.width * 0.5f; // Only allow dragging within 90% of the slider width, centered float limit = halfWidth * slideareaOffsetMultiplier; float clampedX = Mathf.Clamp(localPoint.x, -limit, limit); Vector3 newPosition = new Vector3(clampedX, handleRect.localPosition.y, handleRect.localPosition.z); handleRect.localPosition = newPosition; // Normalize within the limited 90% range float normalized = (clampedX + limit) / (limit * 2f); //Debug.Log(normalized); CurrentValue = Mathf.Lerp(minValue, maxValue, normalized); // Displaying the warning. if (CurrentValue > (warningThreshholdValue*(maxValue - minValue) + minValue)) warningText.gameObject.SetActive(true); else warningText.gameObject.SetActive(false); //Debug.Log(warningThreshholdValue); } }