Files
Simulation/Assets/Scripts/UI/ManualScroller.cs
2025-04-29 10:50:48 +09:00

51 lines
1.5 KiB
C#

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;
}
}