微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

void onm ouseDrag() {    
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()?

解决方法:

使用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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐