我搜索了一段时间,但是我不知道如何解决这个讨厌的错误。我使用的是自顶向下的视图(指向-z),基本上是2d模式,其中3d对象和摄像头处于透视模式。
当所有东西都在同一平面上移动时,我需要将对象朝向鼠标,忽略z方向。
我正在使用以下代码:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3(0, 0, 1f));
mouseToWorld.z = 0f;
Vector3 difference = mouseToWorld - transform.position;
difference.Normalize();
float angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, angle - 90);
不幸的是,它仅在物体静止时才起作用,并且当速度> 0时就会破裂;
任何提示将不胜感激:)
p.s。我要在z上加1,然后将其重置,因为否则,无论我将指针移到何处,mouseToWorld始终为0。
答案 0 :(得分:1)
可能是因为速度向量和鼠标方向不同而中断了。
以下脚本将使箭头跟随鼠标,它与您的脚本基本相同,只是它也会更新位置:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowMouse : MonoBehaviour {
public float moveSpeed = 0.01f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), moveSpeed);
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
difference.Normalize();
float rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotation_z);
}
}
答案 1 :(得分:0)
感谢您的回答!我发现您需要将播放器和相机之间的距离减去鼠标的初始位置:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition-新的Vector3(0,0,Camera.main.transform.position.z));
这是工作脚本:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition - new Vector3(0, 0, Camera.main.transform.position.z));
//Debug.DrawLine(transform.position, mouseToWorld);
mouseToWorld.z = 0f;
Vector3 difference = mouseToWorld - transform.position;
difference.Normalize();
float angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, angle - 90);