Unity 判断鼠标上下左右拖动
public class Logic : MonoBehaviour
{
private float StartMouseLocationX;
private float StartMouseLocationY;
private float EndMouseLocationX;
private float EndMouseLocationY;
#region 记录鼠标拖动开始位置
private void OnMouseDown()
{
if (Input.GetMouseButtonDown(0))
{
StartMouseLocationX = Input.mousePosition.x;
StartMouseLocationY = Input.mousePosition.y;
//避免在拖动过程中产生的位置变化
EndMouseLocationX = StartMouseLocationX;
EndMouseLocationY = StartMouseLocationY;
}
}
#endregion
#region 记录鼠标拖动结束位置
private void OnMouseUp()
{
if (Input.GetMouseButtonUp(0))
{
EndMouseLocationX = Input.mousePosition.x;
EndMouseLocationY = Input.mousePosition.y;
}
}
#endregion
#region 判断鼠标是否进行了拖动
private bool IfDrag()
{
if (MouseMoveDistitens(StartMouseLocationX, StartMouseLocationY, EndMouseLocationX, EndMouseLocationY) < 10)
{
return false;
}
else
{
return true;
}
}
#endregion
#region 计算鼠标移动距离
private float MouseMoveDistitens(float Startx,float Starty,float Endx,float Endy)
{
return Mathf.Sqrt((Startx - Endx) * (Startx - Endx) + (Starty - Endy) * (Starty - Endy));
}
#endregion
#region 判断鼠标拖动方向
private string MoveDirection()
{
if (Mathf.Abs(EndMouseLocationX - StartMouseLocationX) > Mathf.Abs(EndMouseLocationY - StartMouseLocationY))//判断是左右移动还是上下移动
{
if (EndMouseLocationX - StartMouseLocationX > 0)//判断是向左还是向右
{
DataZeroing();//清空本次鼠标拖动产生的位置信息
return "Right";
}
else
{
DataZeroing();
return "Left";
}
}
else
{
if (EndMouseLocationY - StartMouseLocationY > 0)//判断是向上还是向下
{
DataZeroing();
return "Up";
}
else
{
DataZeroing();
return "Down";
}
}
}
#endregion
#region 数据归零
private void DataZeroing()
{
StartMouseLocationX = 0;
StartMouseLocationY = 0;
EndMouseLocationX = 0;
EndMouseLocationY = 0;
}
#endregion
void Update()
{
if (IfDrag())
{
Debug.Log(MoveDirection());
}
}
}