Scroll Rect手动滚动脚本Unity C#

时间:2016-12-02 12:01:56

标签: c# unity3d scrollbar scrollview

我想为Unity制作一个C#脚本,当我按下" UP"时,滚动视图会向上滚动。按下" DOWN"键并向下滚动键。

4 个答案:

答案 0 :(得分:7)

只需使用

ScrollRect.horizontalNormalizedPosition // value range (0 to 1)

ScrollRect.verticalNormalizedPosition // value range (0 to 1)

在上下按钮的按钮点击事件处理程序中相应地尝试lerp这些值。

或者您可以在UnityUI-Extentions

查看脚本HorizontalScrollSnap.csVerticalScrollSnap.cs

希望这有帮助

答案 1 :(得分:1)

你的问题非常不完整。 2d还是3d?你有什么尝试?

继承人如何做到这一点,有一些假设,你把信息留在了外面。 在相机组件中添加此代码:

void Update() {
    if (Input.GetKeyDown(Input.KeyCode.W) {
        transform.position = new Vector3(transform.position.x, transform.position.y + 2, transform.position.z);
    }
}

这样做是为了访问附加脚本的对象变换,如果单击W,则用+2调整其位置的Y值。

然后您可以添加更多if语句并调整键,但核心就在那里。

答案 2 :(得分:0)

进行平滑滚动(使用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;
    }
}

答案 3 :(得分:0)

其他答案似乎不完整或过于复杂,所以我是这样做的。假设 scroll 是您要滚动的方向,speed 是一个以内容单位/秒为单位控制滚动速度的属性,scrollRect 是对 ScrollRect 组件的引用:

        if (scroll != 0) {
            float contentHeight = scrollRect.content.sizeDelta.y;
            float contentShift = speed * scroll * Time.deltaTime;
            scrollRect.verticalNormalizedPosition += contentShift / contentHeight;
        }

这应该为任何内容大小移动适当的量,并正确地导致顶部和底部的弹性回弹(如果您的 ScrollRect 已为此配置)。