Unity3d 鼠标仍在向下时终止拖动

Unity3d 鼠标仍在向下时终止拖动,unity3d,Unity3d,想象一下一些标准的UnityUI滚动视图。你用鼠标抓住它并开始拖动它,这样它就可以用鼠标滚动了。如何通过编程使其在鼠标按钮仍处于按下状态时停止滚动?有没有办法让ScrollRect认为用户释放了鼠标按钮?让EventSystem认为发生了什么事情而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多要让EventSystem认为发生了什么而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多这是一个很老的问题

想象一下一些标准的UnityUI滚动视图。你用鼠标抓住它并开始拖动它,这样它就可以用鼠标滚动了。如何通过编程使其在鼠标按钮仍处于按下状态时停止滚动?有没有办法让ScrollRect认为用户释放了鼠标按钮?

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

要让EventSystem认为发生了什么而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多

这是一个很老的问题,但我发现了完全相同的问题,没有干净的解决方案。我的问题是让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;
}

这是一个很老的问题,但我发现了完全相同的问题,没有一个干净的解决方案。我的问题是让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;
}

为什么?在ScrollView上,您可以根据拖动->更新scrollPosition,如果达到最大值,它将停止滚动further@derHugo我需要做拖放功能。当用户将项目拖出ScrollView时,ScrollView需要停止跟随鼠标。啊,好的,谢谢你的帮助,现在我明白为什么了?在ScrollView上,您可以根据拖动->更新scrollPosition,如果达到最大值,它将停止滚动further@derHugo我需要做拖放功能。当用户将项目拖出ScrollView时,ScrollView需要停止跟随鼠标。啊,好的,谢谢你的帮助,现在我看到了一个有趣的解决方案!不完美但很有趣,谢谢。哇,有趣的解决方案!不完美但很有趣,谢谢。