【问题标题】:ScreenToWorldPoint with perspective cameras带有透视相机的 ScreenToWorldPoint
【发布时间】:2015-03-23 09:48:11
【问题描述】:

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

【问题讨论】:

    标签: unity3d camera unityscript perspective


    【解决方案1】:

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

    请在发布问题之前使用谷歌。在此处发布之前,您将找到答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 2021-03-07
      • 2014-05-27
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多