如何在Unity中使用OnMouseDrag在屏幕上拖动时禁用按钮OnClick

时间:2017-01-27 14:01:15

标签: c# button unity3d mouse drag

我正在使用OnMouseDrag()来更改屏幕上对象的摄像机视图。代码如下:

void OnMouseDrag() {    
if (isGameOver) {           
return;         
}       
float rotSpeed = GameConst.rotateSpeed * 20.0f ;
float rotX = Input.GetAxis("Mouse X") * rotSpeed * Mathf.Deg2Rad;
float rotY = Input.GetAxis("Mouse Y") * rotSpeed * Mathf.Deg2Rad;
transform.RotateAround(Vector3.up, -rotX);      transform.RotateAround(Vector3.right - Vector3.forward, -rotY);
}

然后,当单击按钮时,我使用button.OnClick().AddListerner()附加功能。

问题是,每次完成拖动时,如果鼠标向上位置在按钮区域,按钮也会调用OnClick()功能。如果只是一个拖动操作,如何禁用OnClick()

2 个答案:

答案 0 :(得分:2)

如果您只是想解决问题,我猜您可以添加一个布尔值isDragging,当您输入OnMouseDrag时设置为true,而在OnMouseUp时设置为false。然后用if (!isDragging)或等效的方法包装你的按钮监听器方法。

根据MonoBehaviour的行为,可能会有一个我不了解的更具技术性的解决方案。

答案 1 :(得分:2)

使用IDragHandler执行拖动并设置您一直拖动的标记。 https://docs.unity3d.com/ScriptReference/EventSystems.IDragHandler.html

如果标志未打开,则使用IPointerUpHandler调用操作。此外,重置旗帜无论发生什么:

public class DragMe : MonoBehaviour, IBeginDragHandler, IPointerUpHandler
{
    private bool isDragging = false;


    public void OnBeginDrag(PointerEventData data)
    {
        this.isDragging = true;
    }
    public void OnPointerUp(PointerEventData eventData)
    {
       if(this.isDragging == false){ Invoke();}
       this.isDragging = false;
    }
}