Unity VR - 用手移动滚动文本(Oculus)

时间:2018-01-16 14:34:40

标签: c# user-interface unity3d virtual-reality scrollrect

我想要的是一个世界空间画布,我可以使用手部动作滚动。我可以获得控制器的worldPosition并找到实际的移动但我无法弄清楚如何启用文本滚动。

我目前正在尝试使用scrollrect +隐藏滚动条并更改滚动条的值,但这不起作用。

我也试过改变textobject的世界位置,虽然我设法使文本相应移动但我无法弄清楚如何找到文本大小,但我认为这就像重新发明了一样。

1 个答案:

答案 0 :(得分:0)

对于现在检查这个的人,我建议使用OVR输入模块及其在oculus框架中提供的滚动组件。我在下面留下我的旧答案。

旧答案,如果您不想使用OVRInput模块

经过多次搜索,我在团结论坛上偶然发现了答案, 我在这里张贴以供将来参考。

在这里,您只需在项目设置中按照指定的轴滚动,如果您想用手移动滚动,只需计算控制器位置之间的差异,对于眼睛触摸,我可以通过从这里更改它们的代码来获取我的代码{ {3}}

public class MoveScrollRect : ScrollRect, IMoveHandler, IPointerClickHandler
{
private const float speedMultiplier = 0.01f;
public float xSpeed = 0;
public float ySpeed = 0;
private float hPos, vPos;


void IMoveHandler.OnMove(AxisEventData e)
{
    xSpeed += e.moveVector.x * (Mathf.Abs(xSpeed) + 0.1f);
    ySpeed += e.moveVector.y * (Mathf.Abs(ySpeed) + 0.1f);
}

void Update()
{

    ySpeed = Input.GetAxis("VerticalScroller");

    hPos = horizontalNormalizedPosition + xSpeed * speedMultiplier;
    vPos = verticalNormalizedPosition + ySpeed * speedMultiplier;

    xSpeed = Mathf.Lerp(xSpeed, 0, 0.1f);
    ySpeed = Mathf.Lerp(ySpeed, 0, 0.1f);

    if (movementType == MovementType.Clamped)
    {
        hPos = Mathf.Clamp01(hPos);
        vPos = Mathf.Clamp01(vPos);
    }

    normalizedPosition = new Vector2(hPos, vPos);
}

public void OnPointerClick(PointerEventData e)
{
    EventSystem.current.SetSelectedGameObject(gameObject);
}

public override void OnBeginDrag(PointerEventData eventData)
{
    EventSystem.current.SetSelectedGameObject(gameObject);
    base.OnBeginDrag(eventData);
}
}