如何在Update()中为Unity VR应用程序设计流畅的UI滚动



我正在Unity中开发一个VR应用程序,我正在努力使用VR控制器的操纵杆开发流畅的UI滚动。到目前为止,我的样子是。。。

private void Update() 
{
float joyStickDirection = globals.menuInteraction_Scroll.GetAxis(SteamVR_Input_Sources.Any).y; // this is either 1 for up or -1 for down
if (joyStickDirection != 0) 
{
float multiplier = joyStickDirection * 5f; 
scrollRect.verticalNormalizedPosition = scrollRect.verticalNormalizedPosition + (multiplier * Time.deltaTime);
}
}

这是可行的,但有两个问题。首先,它根据滚动容器的大小以不同的速度滚动。其次,滚动不是很平滑,因为它显然只是跳过了0和1之间的不同间隙。

我想我知道哪里出了问题,但我在Update((中没有足够的工作经验来找出正确的方法。有人能提出建议吗?

实际上,您不一定要遍历ScrollRect组件本身。

我通常只会做

public class ScrollExample : MonoBehaviour
{
public float speed = 5f;
public Transform ScrollContent;

void Update()
{
// this is either 1 for up or -1 for down
var joyStickDirection = globals.menuInteraction_Scroll.GetAxis(SteamVR_Input_Sources.Any).y; 
if (joyStickDirection != 0) 
{
var multiplier = joyStickDirection * speed; 

// You want to invert the direction since scrolling down actually means
// moving the content up
ScrollContent.position -= Vector3.up * multiplier * Time.deltaTime;
}
}
}

ScrollRect然后更新并处理其余部分。speed以单位/秒为单位,或在屏幕空间覆盖画布中以像素/秒为单元,无论内容有多大。

通常,您需要调整ScrollRect的弹性,或者直接将"移动类型"设置为"夹紧"。

最新更新