Unity3d 鼠标仍在向下时终止拖动
想象一下一些标准的UnityUI滚动视图。你用鼠标抓住它并开始拖动它,这样它就可以用鼠标滚动了。如何通过编程使其在鼠标按钮仍处于按下状态时停止滚动?有没有办法让ScrollRect认为用户释放了鼠标按钮?让EventSystem认为发生了什么事情而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多要让EventSystem认为发生了什么而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多这是一个很老的问题,但我发现了完全相同的问题,没有干净的解决方案。我的问题是让scrollRect具有可以向左/向右滚动的项目,但当用户选择一个项目并将其向上拖动时,scrollRect应取消滚动并允许用户向上拖动项目。我通过临时设置ScrollRect.enable至Unity3d 鼠标仍在向下时终止拖动,unity3d,Unity3d,想象一下一些标准的UnityUI滚动视图。你用鼠标抓住它并开始拖动它,这样它就可以用鼠标滚动了。如何通过编程使其在鼠标按钮仍处于按下状态时停止滚动?有没有办法让ScrollRect认为用户释放了鼠标按钮?让EventSystem认为发生了什么事情而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多要让EventSystem认为发生了什么而实际上没有发生,这并不容易。我相信实现自己的ScrollRect逻辑和自己解析鼠标输入要容易得多这是一个很老的问题
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需要停止跟随鼠标。啊,好的,谢谢你的帮助,现在我看到了一个有趣的解决方案!不完美但很有趣,谢谢。哇,有趣的解决方案!不完美但很有趣,谢谢。