所以我刚才有一个奇怪的问题。我写了一个小脚本,当攻击一个对象时会使它面向鼠标指针。但是,由于我从正交相机切换到透视相机,因此脚本已停止工作。我已经添加了一些调试,看起来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;
答案 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个单位的世界点。
请在发布问题前使用谷歌。在发布此处之前,您会找到一个很大的变化。