滚动rect手动滚动浏览脚本Unity C#



我想在我按"向上"键时制作一个c#脚本以使滚动视图向上滚动,然后在我按"向下"键时向下滚动。

只需使用

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

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

尝试在按钮上单击"上下单击"按钮的按钮上相应的lerp这些值。

或者您可以在UnityUi-Extentions

查看脚本HorizontalScrollSnap.csVerticalScrollSnap.cs

其他答案似乎不完整或过于复杂,所以这就是我的做法。假设scroll是您要滚动的方向,speed是控制您的滚动速度/sec的滚动速度的属性,而scrollRect是对卷轴组件的引用:

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

这应该转移任何内容大小的适当量,并正确地导致顶部和底部的弹性反弹(如果为此配置了滚动条件)。

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

您的问题非常不完整。对于2D还是3D?你尝试了什么?

Heres ID如何做到这一点,并有一些假设,您将信息遗漏了。在相机组件中添加此代码:

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 statements并调整密钥,但是核心在那里。

最新更新