64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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<RectTransform>();
 | |
|     }
 | |
| 
 | |
|     public void OnPointerEnter(PointerEventData eventData)
 | |
|     {
 | |
|         SlideToPosition(onPosition);
 | |
|         AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Hover, gameObject);  //3d oneshot sound
 | |
|     }
 | |
| 
 | |
|     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;
 | |
|     }
 | |
| }
 |