using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections; public class BottomBarButtonUIAnimator : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { private RectTransform rectTransform; private Vector3 originalScale; public float clickScale = 1.2f; // 点击时放大的比例 public float clickDuration = 0.1f; // 放大缩小的时间 private void Awake() { rectTransform = GetComponent(); originalScale = rectTransform.localScale; // 记录初始大小 } public void OnPointerDown(PointerEventData eventData) { StopAllCoroutines(); // 防止多次点击冲突 StartCoroutine(ScaleButton(originalScale * clickScale)); } public void OnPointerUp(PointerEventData eventData) { StopAllCoroutines(); StartCoroutine(ScaleButton(originalScale)); } public void FakeClickEffect() { StopAllCoroutines(); StartCoroutine(FakeClickCoroutine()); } private IEnumerator FakeClickCoroutine() { yield return StartCoroutine(ScaleButton(originalScale * clickScale)); // 模拟按下 yield return new WaitForSeconds(clickDuration); // 等待按住时间 yield return StartCoroutine(ScaleButton(originalScale)); // 模拟松开 } private IEnumerator ScaleButton(Vector3 targetScale) { Vector3 startScale = rectTransform.localScale; float elapsedTime = 0f; while (elapsedTime < clickDuration) { elapsedTime += Time.deltaTime; rectTransform.localScale = Vector3.Lerp(startScale, targetScale, elapsedTime / clickDuration); yield return null; } rectTransform.localScale = targetScale; // 确保最终大小正确 } }