需求:如题
在做UI拖拽的时候用了IDragHandler接口,非常好用,但是这个接口是继承自IEventSystemHandler,而所有UnityEngine.EventSystems中的类都继承自EventSystems.UIBehaviour,所以这个接口只对canvas和UI起作用。
所以想到了对于拖拽3D物体通常用的函数OnMouseDrag(),但是实际在我们的工程中使用的时候并不是很舒服,所以采用Input和raycast检测的方式。
在要拖拽的物体A(有collider,有rigidbody)上挂的脚本Ascript中:
bool isDragging = false;
Vector3 screenSpace;
Vector3 resPos;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
isDragging = true;
screenSpace = Camera.main.WorldToScreenPoint(transform.position);
//do something...
}
if (isDragging)
{
//keep track of the mouse position