Scroll Rect manual scrolling through script Unity C#
Solution 1
Simply use
ScrollRect.horizontalNormalizedPosition // value range (0 to 1)
or
ScrollRect.verticalNormalizedPosition // value range (0 to 1)
try to lerp
these values accordingly on button click event handlers for up and down buttons.
Or you can have a look at scripts HorizontalScrollSnap.cs
and VerticalScrollSnap.cs
at UnityUI-Extentions
Solution 2
The other answers seemed incomplete or overly complex, so here's how I did it. Assuming scroll
is the direction you want to scroll, speed
is a property that controls your scroll speed in content units/sec, and scrollRect
is a reference to the ScrollRect component:
if (scroll != 0) {
float contentHeight = scrollRect.content.sizeDelta.y;
float contentShift = speed * scroll * Time.deltaTime;
scrollRect.verticalNormalizedPosition += contentShift / contentHeight;
}
This should shift the right amount for any content size, and correctly causes the elastic rebound at the top and bottom (if your ScrollRect is configured for that).
MBS
Updated on June 05, 2022Comments
-
MBS almost 2 years
I want to make a C# script for Unity to make the scroll view scroll up when I press "UP" key and scroll down when I press "DOWN" key.
-
MBS over 7 yearsI want to use with VR 3d application. I don't want to change the rotation of the camera. What I made in my app is to add objects to Content branch and after adding a number of objects the old ones start to go up and disappear, and I need to scroll up (using scrollbar vertical) to see them
-
Fredrik Schön over 7 yearsOh, I see. Maybe Umair M's response is more accurate then.
-
Joe Strout almost 3 yearsThis solution is a bit of a pain to use, though, since you probably want to scroll a constant amount in content space. So you'd have to do some calculations to figure out the normalized amount to add or subtract. It's a bit surprising there isn't some easier or more standard way to mimic what the scroll wheel does.
-
R1PFake over 2 yearsThis works, but I noticed that the speed was not as fast as it should be. For example I set it to 10 it did not scroll 10 units / sec. I think that's because the scroll viewer does not scroll the full content height, so I removed the viewport height: float contentHeight = scrollRect.content.SizeDelta.Y - scrollRect.viewport.rect.height; I then also renamed the variable to scrollHeight, after that change the scroll speed of 10 scrolled 10 units / sec