DaoNiaoShu_Dog/Assets/_Scripts/FrameworkYiLiao/Scroll/ScrollViewHorizontalClickMove.cs

59 lines
1.8 KiB
C#
Raw Normal View History

2025-09-08 14:51:28 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
public class ScrollViewHorizontalClickMove : MonoBehaviour
{
ScrollRect scrollRect; // <20><><EFBFBD><EFBFBD>ScrollRect<63><74><EFBFBD><EFBFBD>
public float smoothTime = 0.3f; // ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>ʱ<EFBFBD><CAB1>
public float stepDistance = 0.16f; // <20>ƶ<EFBFBD><C6B6>ľ<EFBFBD><C4BE><EFBFBD>
private float targetPosition; // Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
private bool isScrolling = false; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>
private void Start()
{
scrollRect = GetComponent<ScrollRect>();
}
public void ScrollLeft()
{
StartCoroutine(SmoothScroll(-stepDistance)); // <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һС<D2BB><D0A1><EFBFBD><EFBFBD>
}
public void ScrollRight()
{
StartCoroutine(SmoothScroll(stepDistance)); // <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><D2B9><EFBFBD>һС<D2BB><D0A1><EFBFBD><EFBFBD>
}
private IEnumerator SmoothScroll(float direction)
{
if (isScrolling) yield break; // <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򲻿<EFBFBD>ʼ<EFBFBD>µĹ<C2B5><C4B9><EFBFBD>
isScrolling = true;
float elapsedTime = 0f;
float lerp = 0f;
// <20><><EFBFBD>ʼʱ<CABC>ĵ<EFBFBD>ǰλ<C7B0>ú<EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB>
float startPosition = scrollRect.horizontalNormalizedPosition;
targetPosition = Mathf.Clamp(startPosition + direction, 0f, 1f); // ȷ<><C8B7>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>Χ<EFBFBD><CEA7>
// ѭ<><D1AD>ֱ<EFBFBD><D6B1><EFBFBD>ﵽĿ<EFB5BD><C4BF>λ<EFBFBD>û򳬹<C3BB>ƽ<EFBFBD><C6BD>ʱ<EFBFBD><CAB1>
while (lerp < 1f && elapsedTime < smoothTime)
{
elapsedTime += Time.deltaTime;
lerp = Mathf.SmoothStep(0f, 1f, elapsedTime / smoothTime); // ʹ<><CAB9>SmoothStep<65><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD>ݲ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>µĹ<C2B5><C4B9><EFBFBD>λ<EFBFBD><CEBB>
float newPosition = Mathf.Lerp(startPosition, targetPosition, lerp);
scrollRect.horizontalNormalizedPosition = newPosition;
// <20>ȴ<EFBFBD><C8B4><EFBFBD>һ֡
yield return null;
}
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB>һ<EFBFBD><D2BB>
scrollRect.horizontalNormalizedPosition = targetPosition;
isScrolling = false;
}
}