Scroll Rect manual scrolling through script Unity C#

15,750

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).

Share:
15,750
MBS
Author by

MBS

Updated on June 05, 2022

Comments

  • MBS
    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
    MBS over 7 years
    I 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
    Fredrik Schön over 7 years
    Oh, I see. Maybe Umair M's response is more accurate then.
  • Joe Strout
    Joe Strout almost 3 years
    This 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
    R1PFake over 2 years
    This 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