带透视摄像头的ScreenToWorldPoint

时间:2015-01-24 12:25:27

标签: unity3d camera unityscript perspective

所以我刚才有一个奇怪的问题。我写了一个小脚本,当攻击一个对象时会使它面向鼠标指针。但是,由于我从正交相机切换到透视相机,因此脚本已停止工作。我已经添加了一些调试,看起来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;

1 个答案:

答案 0 :(得分:5)

This is addressed in unity answers

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个单位的世界点。

请在发布问题前使用谷歌。在发布此处之前,您会找到一个很大的变化。