我几天前开始搞乱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修复了它。
答案 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
编辑:误读了你的问题。由于一些奇怪的原因,我无法删除我的答案,所以请忽略它。