using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using System.Collections; public class HoverSlideButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public RectTransform buttonTransform; public Vector2 offPosition = Vector2.zero; public Vector2 onPosition = new Vector2(30f, 0f); // e.g., slide 30px to the right public float slideDuration = 0.2f; private Coroutine slideCoroutine; private bool isOn = false; private void Reset() { buttonTransform = GetComponent(); } public void OnPointerEnter(PointerEventData eventData) { SlideToPosition(onPosition); } public void OnPointerExit(PointerEventData eventData) { if (!isOn) SlideToPosition(offPosition); } public void SetOnState(bool on) { isOn = on; SlideToPosition(on ? onPosition : offPosition); } private void SlideToPosition(Vector2 target) { if (slideCoroutine != null) StopCoroutine(slideCoroutine); slideCoroutine = StartCoroutine(SmoothSlide(target)); } private IEnumerator SmoothSlide(Vector2 target) { Vector2 startPos = buttonTransform.anchoredPosition; float timeElapsed = 0f; while (timeElapsed < slideDuration) { buttonTransform.anchoredPosition = Vector2.Lerp(startPos, target, timeElapsed / slideDuration); timeElapsed += Time.deltaTime; yield return null; } buttonTransform.anchoredPosition = target; } }