我要2dgameobject转向目标2dgameobject 我有一个方法-旋转到目标。 代码:
Quaternion rawRoation = Quaternion.Slerp(transform.rotation,
Quaternion.LookRotation(Player.GetComponent<Transform>().position - transform.position),
10*Time.deltaTime);
transform.rotation = new Quaternion (0, 0, rawRoation.z, rawRoation.w);
问题-目标位置x 1-
enter image description here 2-{{3}}
答案 0 :(得分:1)
问题是这行代码:transform.rotation = new Quaternion (0, 0, rawRoation.z, rawRoation.w);
我不知道您要实现什么,但是如果要使x和y旋转无效,请使用:
transform.rotation = Quaternion.Euler(0.0f, 0.0f, rawRoation.eulerAngles.z);
代码功能示例:
// Start is called before the first frame update
void Start()
{
Quaternion q1 = new Quaternion(0.3f, 0.7f, 0.4f, 0.5f);
Quaternion q2 = new Quaternion(0.0f, 0.0f, 0.4f, 0.5f);
Debug.Log(q1.eulerAngles);
Debug.Log(q2.eulerAngles);
}
这里是输出:
q1: (344.8, 100.3, 59.1)
q2: (0.0, 0.0, 77.3)
请查看四元数的数学
编辑-2D LookAt:
您的代码无法正常工作,因为您处于2D状态。如果要在3D模式下查看x位置小于对象位置的目标,则必须绕y轴旋转180度,而在2D模式下则无效。你不能。进行此y旋转可防止对象倒置。但是在2D模式下您无法进行这种旋转。
您必须选择:
如果您的相机从侧面看,并且您的物体可以上下颠倒,请使用修改后的代码,如果目标x位置较小,还可以将x比例设置为-1。
如果您的相机从上向下看,请使用以下内容 代码:
颠倒视图的代码:
// Update is called once per frame
void Update() {
Vector3 targetDir = target.position - transform.position;
float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * 10);
}