带透视摄像头的ScreenToWorldPoint

Lor*_*git 1 camera unity-game-engine perspective unityscript

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

Var*_*lex 7

这是在统一答案中解决的.

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));
 }
Run Code Online (Sandbox Code Playgroud)

你将从相机获得10个单位的世界点.

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