所以我现在遇到了一个奇怪的问题。我编写了一个小脚本,当附加到一个对象时,它将使其面向鼠标指针。但是,自从我从正交相机切换到透视相机后,该脚本就停止工作了。我添加了一些调试,看起来无论鼠标在哪里,ScreenToWorldPoint 都会返回相同的值。我怀疑这与鼠标本质上是 2D 实体有关,但我不确定如何解决这个问题。
void Update () {
Vector3 difference = camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
//Debug.Log(Camera.main.ScreenToWorldPoint(Input.mousePosition));
difference.Normalize();
difference.Set (difference.x, difference.y, 0);
transform.up = difference;
Unity Answers 说,我引用:
ScreenToWorldPoint 接收 Vector3 参数,其中 x 和 y 是 屏幕坐标,z 是距相机的距离。自从 Input.mousePosition.z 始终为 0,您得到的是相机 位置。 2D 屏幕中的鼠标位置对应于中的一条线 通过相机中心和鼠标指针的3D世界, 因此你必须以某种方式选择你在这条线上的哪个点 感兴趣 - 这就是为什么你必须远离相机的距离 在 z。如果你尝试这样的事情:
function Update() { var mousePos = Input.mousePosition; mousePos.z = 10; // select distance = 10 units from the camera Debug.Log(camera.ScreenToWorldPoint(mousePos)); }
您将获得距离相机 10 个单位的世界点。
请在发布问题之前使用谷歌。这是一个很大的变化,您可以在此处发布之前找到答案。