TH1/Unity/Assets/Scripts/UI/BottomBarButtonUIAnimator.cs
2025-07-17 18:26:28 +08:00

59 lines
1.8 KiB
C#

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<RectTransform>();
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; // 确保最终大小正确
}
}