using System.Collections; using UnityEngine; using UnityEngine.UI; public class ScrollViewVerticalMoveItem : MonoBehaviour { public ScrollRect scrollRect; // 你需要将 ScrollRect 拖到这里 public float cellHeight = 100f; // 每个格子的高度,自己根据实际情况设置 public void MoveDown() { // 计算目标位置 float newY = scrollRect.content.anchoredPosition.y + cellHeight; // 获取Content的高度和可视区域的高度 float contentHeight = scrollRect.content.sizeDelta.y; float viewportHeight = scrollRect.viewport.rect.height; // 确保不超过最大 Y 值 newY = Mathf.Min(newY, contentHeight - viewportHeight); // Smoothly move to the new position StartCoroutine(SmoothMove(scrollRect.content.anchoredPosition.y, newY)); } private IEnumerator SmoothMove(float startY, float targetY) { float elapsedTime = 0.0f; float duration = 0.3f; // 移动持续时间 while (elapsedTime < duration) { float newY = Mathf.Lerp(startY, targetY, (elapsedTime / duration)); scrollRect.content.anchoredPosition = new Vector2(scrollRect.content.anchoredPosition.x, newY); elapsedTime += Time.deltaTime; yield return null; } // 确保最后位置准确 scrollRect.content.anchoredPosition = new Vector2(scrollRect.content.anchoredPosition.x, targetY); } }