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.
5 Answers
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
1 Comment
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).
1 Comment
For a smooth scroll (using lerp).
[SerializeField]
private ScrollRect _scrollRectComponent;
[SerializeField]
RectTransform _container;
private IEnumerator LerpToPage(int page)
{
Vector2 _lerpTo = (Vector2)_scrollRectComponent.transform.InverseTransformPoint(_container.position) - (Vector2)_scrollRectComponent.transform.InverseTransformPoint(target.position);
bool _lerp = true;
Canvas.ForceUpdateCanvases();
while(_lerp)
{
float decelerate = Mathf.Min(10f * Time.deltaTime, 1f);
_container.anchoredPosition = Vector2.Lerp(_scrollRectComponent.transform.InverseTransformPoint(_container.position), _lerpTo, decelerate);
if (Vector2.SqrMagnitude((Vector2)_scrollRectComponent.transform.InverseTransformPoint(_container.position) - _lerpTo) < 0.25f)
{
_container.anchoredPosition = _lerpTo;
_lerp = false;
}
yield return null;
}
}
Comments
Your question is very incomplete. For 2d or 3d? What have you tried?
Heres how id do it, with some assumptions where you left information out. Add this code in your Camera component:
void Update() {
if (Input.GetKeyDown(Input.KeyCode.W) {
transform.position = new Vector3(transform.position.x, transform.position.y + 2, transform.position.z);
}
}
What this does is to access the objects tranform you attach the script to and adjust the Y-value of its position with +2 if you click W.
You can then just add more if-statements and adjust the keys, but the core is there.
content.localPosition = new Vector3(content.localPosition.X, content.LocalPosition.Y + 1, content.localPosition.Z);