在鼠标仍然按下时终止拖动

时间:2018-07-25 12:40:10

标签: unity3d

想象一下一些标准的Unity UI ScrollView。您可以用鼠标抓住它并开始拖动它,以便它可以用鼠标滚动。我如何以编程方式使其在鼠标按钮仍处于按下状态时停止滚动?有什么方法可以使ScrollRect认为用户释放了鼠标按钮?

2 个答案:

答案 0 :(得分:1)

让EventSystem认为发生了某些事情而没有发生的事情并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多

答案 1 :(得分:1)

很老的问题,但是我发现了同样的问题,没有干净的解决方案。我的问题是用带有我可以向左/向右滚动的项目的scrollRect,但是当用户选择一个项目并将其向上拖动时,scrollRect应该取消滚动并允许用户向上拖动项目。我是通过将ScrollRect.enable临时设置为false并在几毫秒后将其重新设置为true来实现的。

这是执行此操作的mu代码的一部分。也许有人觉得这很有用。

void Update()
{
    if (state == DragState.Started) {
        dragStart = Input.mousePosition;
        state = DragState.Continued;
    }

    if (state == DragState.Continued) {
        Vector3 pos = Input.mousePosition;
        if (pos.y - dragStart.y > 80) {
            scrollRect.enabled = false;
            state = DragState.None;
            Invoke("ReenableScroll", 0.01f);
        }
    }
}

private void ReenableScroll() {
    scrollRect.enabled = true;
}