59 lines
1.8 KiB
C#
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; // 确保最终大小正确
|
|
}
|
|
}
|