鼠标事件
//鼠标必须在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 ));
}