我几天前就开始摆弄Unity了,我不是编码专家,如果我错过了什么明显的东西,请原谅。
几个小时以来,我一直试图从屏幕上的一个物体到我在2D空间中点击的任何地方画一条线,但都失败了。我用谷歌搜索了一下,但找不到一个可行的解决方案。问题是当我点击的时候,直线是从物体画到相机的位置,而不是鼠标的位置。在这一点上我不知道该怎么办。我需要一些帮助。
以下是代码的简化版本。
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的参数(vect3)的z变量表示距相机的距离,由于我将其值设为0,因此将直线直接绘制到相机。将vect3的z值更改为trans.postion.z-Camera.main.trans.position.z修复了这个问题。
发布于 2018-06-11 22:14:42
我希望我能理解你的问题。
您可以做的是将最后一个点存储为变量,并使用此变量来绘制下一条直线。
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;
}
}
发布于 2018-06-11 22:26:31
Input.mouseposition在屏幕空间中给出一个位置(像素)。您需要使用ScreenToWorldPoint来获取鼠标相对于相机的位置。查看鼠标位置所需的文档如下:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html
编辑:误读你的问题。由于某种奇怪的原因,我不能删除我的答案,所以请忽略它。
https://stackoverflow.com/questions/50799699
复制相似问题