ScreenToWorldPoint与透视相机



所以我刚才遇到了一个奇怪的问题。我写了一个小脚本,当它指向一个对象时,它会导致它面对鼠标指针。但是,由于我从正交摄像机切换到透视摄像机,脚本已停止工作。我已经添加了一些调试,看起来无论鼠标在哪里,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 个单位的世界点。

请在发布问题之前使用谷歌。有一个很高的变化,你会在这里发布之前找到你的答案。

最新更新