拖拽物体的功能unity自带了拖拽的方法OnMouseDrag(),不用费劲心思写拖拽逻辑,直接在函数里写将鼠标的屏幕坐标转换为世界坐标,再将这个坐标赋值给物体的position就可以实现拖拽,但是拖拽刚体的时候会出现穿墙乱飞的现象(以下用的是2D刚体,3D刚体也同理),这是因为刚体的移动还会触发物理碰撞的机制,强制改变坐标会出现问题,好在unity里自带了让刚体以符合物理规律运动的方法MovePosition,除此之外,Rigidbody2D组件还附带了很多物理运动的方法,控制刚体运动最好用这些方法,这样可以最大限度避免出现各种违背物理规律的奇怪问题。
(以下附上2D刚体拖拽的代码)
private Rigidbody2D rigidbody2d;//2D物体的刚体组件
private void Start()
{
rigidbody2d = transform.GetComponent<Rigidbody2D>();//获取2D刚体组件
}
//拖拽物体
private void OnMouseDrag()
{
Vector2 cursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);//获取鼠标的世界坐标
if (Vector2.Distance(cursorPos, transform.position)<1)//控制拖拽距离,防止拖拽过快穿墙
{
rigidbody2d.MovePosition(cursorPos);//改变刚体坐标,符合物理规律
}
}