无法在世界空间中获得鼠标位置

时间:2018-06-11 14:07:43

标签: unity3d mouse-position

我几天前开始搞乱Unity,而且我没有编码专家所以请原谅我,如果我错过任何明显的东西。

几个小时以来,我一直试图从屏幕上的一个物体画一条线到我在2D空间中点击的任何地方并且悲惨地失败。我用Google搜索,但无法找到可行的解决方案。问题是当我点击时,线条从对象绘制到相机的位置而不是鼠标的位置。我此刻不知道该怎么做。我可以使用一些帮助。

这是代码的简化版本。

public class test: MonoBehaviour {


public Rigidbody rb;
public Vector3 vect3;

void Start () {
    rb = GetComponent<Rigidbody>();

}

void Update () {

    if (Input.GetKey(KeyCode.Mouse0))
    {
        vect3 = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 0); 
        //I made the vector's Z value 0 because the object's Z coordinate is also 0. 
        //It is to avoid capturing 3D coordinates. 
        Debug.DrawLine(rb.position, Camera.main.ScreenToWorldPoint(vect3), Color.red, 1);

    }

}

}

编辑:修复了代码中的方法错误。

edit2:我解决了。结果是Camera.main.ScreenToWorldPoint的z变量参数(vect3)表示距离相机的距离,因为我将其值设为0,所以直接将线条绘制到相机上。将vect3的z值更改为transform.position.z - Camera.main.transform.position.z修复了它。

2 个答案:

答案 0 :(得分:0)

我希望我理解你的问题 您可以做的是将最后一个点存储为变量,并使用它来绘制下一行。

public class test: MonoBehaviour {

public Rigidbody rb;
public Vector3 lastPoint;

void Start () {
    rb = GetComponent<Rigidbody>();
}

void Update () {
    if (Input.GetKey(KeyCode.Mouse0))
    {
        Vector3 vect3 = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 0); 
        vect3 = Camera.main.ScreenToWorldPoint(vect3);
        //I made the vector's Z value 0 because the object's Z coordinate is also 0. 
        //This is to capture location in 2D space instead of 3D. This might be the problem. 
        if(lastPoint == null) {
             lastPoint = vect3,
             return;
        }
        Debug.DrawLine(lastPoint, vect3, Color.red, 1);
        lastPoint = vect3;
    }
}

答案 1 :(得分:0)

Input.mouseposition在屏幕空间(像素)中给出一个位置。您需要使用ScreenToWorldPoint来获取相对于查看它的相机的鼠标位置 以下是必要的文档:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

编辑:误读了你的问题。由于一些奇怪的原因,我无法删除我的答案,所以请忽略它。