![](/img/trans.png)
[英]Unity HingeJoint have weird behavior in autogeneration problem with rotation?
[英]I have problem with rotation; rotatetoToTarget;
我想将 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);
问题 - 当目标的 position.x < this.object.transform.position.x(1) - 旋转中断.. else(2) - 好吧。
1 -在此处输入图像描述
2 -在此处输入图像描述
问题是这行代码: 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.