我想为Unity制作一个C#脚本,当我按下" UP"时,滚动视图会向上滚动。按下" DOWN"键并向下滚动键。
答案 0 :(得分:7)
只需使用
ScrollRect.horizontalNormalizedPosition // value range (0 to 1)
或
ScrollRect.verticalNormalizedPosition // value range (0 to 1)
在上下按钮的按钮点击事件处理程序中相应地尝试lerp
这些值。
或者您可以在UnityUI-Extentions
查看脚本HorizontalScrollSnap.cs
和VerticalScrollSnap.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 已为此配置)。