我想在我按"向上"键时制作一个c#脚本以使滚动视图向上滚动,然后在我按"向下"键时向下滚动。
只需使用
ScrollRect.horizontalNormalizedPosition // value range (0 to 1)
或
ScrollRect.verticalNormalizedPosition // value range (0 to 1)
尝试在按钮上单击"上下单击"按钮的按钮上相应的lerp
这些值。
或者您可以在UnityUi-Extentions
HorizontalScrollSnap.cs
和VerticalScrollSnap.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并调整密钥,但是核心在那里。