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);
    }

谢谢。

这是因为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);

最新更新