using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; public class ManualScroller : MonoBehaviour, IScrollHandler, IBeginDragHandler, IDragHandler, IPointerEnterHandler, IPointerExitHandler { public RectTransform viewport; public RectTransform content; public float scrollSpeed = 50.0f; private bool isMouseOver = false; private Vector2 lastDragPosition; public void OnScroll(PointerEventData eventData) { if (!isMouseOver) return; Vector2 pos = content.anchoredPosition; pos.y -= eventData.scrollDelta.y * scrollSpeed; if (pos.y < 0) pos.y = 0; if (viewport.rect.height + pos.y > content.rect.height) pos.y = content.rect.height - viewport.rect.height; content.anchoredPosition = pos; } public void OnBeginDrag(PointerEventData eventData) { if (!isMouseOver) return; lastDragPosition = eventData.position; } public void OnDrag(PointerEventData eventData) { if (!isMouseOver) return; Vector2 delta = eventData.position - lastDragPosition; Vector2 pos = content.anchoredPosition; pos.y += delta.y; content.anchoredPosition = pos; lastDragPosition = eventData.position; } public void OnEndDrag(PointerEventData eventData) { } public void OnPointerEnter(PointerEventData eventData) { isMouseOver = true; } public void OnPointerExit(PointerEventData eventData) { isMouseOver = false; } }