鼠标事件监听和鼠标事件应用

鼠标事件

//鼠标必须在Collider上,点击鼠标触发时间

private void OnMouseDown()

{

//鼠标按下

Debug.Log("鼠标按下");

}

private void OnMouseUp()

{

Debug.Log("鼠标抬起");

}

private void OnMouseDrag()

{

Debug.Log("鼠标拖拽");//就算鼠标离开物体也会一只调用 直到鼠标抬起

}

private void OnMouseEnter()

{

Debug.Log("鼠标移进");//只调用一次,进去的时候

}

private void OnMouseExit()

{

Debug.Log("鼠标移出");//也是只调一次,移出的时候

}

private void OnMouseOver()

{

Debug.Log("鼠标悬浮");//每帧都在调用

}

private void OnMouseUpAsButton()

{

Debug.Log("按下又抬起的时候调用");

}

//总结:当鼠标按下的时候,又抬起最先鼠标移进OnMouseEnter 先执OnMouseDown,再执行OnMouseUpAsButton,再执行OnMouseUp

例子 实现物体拖拽

Vector3 startPostion;//开始位置

Vector3 endPos;//结束位置

Vector3 offset;

private void OnMouseDown()

{

startPostion = MyScreenPointToWorldPoint(Input.mousePosition, transform);

}

private void OnMouseDrag()

{

endPos = MyScreenPointToWorldPoint(Input.mousePosition, transform);

offset = endPos - startPostion;

transform.position += offset;

startPostion = endPos;

}

Vector3 MyScreenPointToWorldPoint(Vector3 screenP, Transform tran) {

 

Vector3 dir = tran.position - Camera.main.transform.position;

Vector3 norDir = Vector3.Project(dir, Camera.main.transform.forward);

return Camera.main.ViewportToWorldPoint(new Vector3(screenP.x / Screen.width, screenP.y / Screen.height,norDir.magnitude ));

}

猜你喜欢

转载自blog.csdn.net/qq_39329287/article/details/85316951