Unity3d用手指问题拖动一个对象

时间:2014-08-28 18:49:28

标签: drag-and-drop unity3d

我正在制作一个脚本来在Y轴上拖动一个对象。它差不多完成了,但我有一个问题。单击对象时,对象的中心移动到鼠标位置,然后我将其拖动,使中心始终位于鼠标位置。当我举起精灵的底部,精灵的中心停留在它的位置并且它不会移动到鼠标位置时,我该如何制作? 这是我的剧本:

    public Vector3 screenPoint;
    public Vector3 offset;

    void OnMouseDown(){
        screenPoint = Camera.main.WorldToScreenPoint (gameObject.transform.position);
        offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }

    void OnMouseDrag(){
        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint), offset;
        transform.position = new Vector3(transform.position.x, curPosition.y, transform.position.z);
    }

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您的curScreenPoint仍在像素坐标中。你在OnMouseDown中所做的那个是正确的。因此,您还应将OnMouseDrag中的像素坐标转换为屏幕空间:

更改此行:

Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, 
                                     Input.mousePosition.y, 
                                     screenPoint.z);

对此:

Vector3 curScreenPoint = Camera.main.ScreenToWorldPoint (new Vector3 (
                                                         Input.mousePosition.x, 
                                                         Input.mousePosition.y, 
                                                         screenPoint.z)
                                                        );

另外,我不太了解你在这一行中所做的事情:

Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint), offset;

但它应该是这样的,因为你只想移动Y:

Vector3 curPosition = new Vector3(curScreenPoint.x, 
                                  curScreenPoint.y + offset.y, 
                                  curScreenPoint.z);