繁体   English   中英

我有旋转问题; 旋转到目标;

[英]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 中你不能做这样的旋转。

你必须选择:

  1. 如果您的相机从侧面看并且您的对象可能倒置,请使用您修改后的代码,如果目标 x 位置较小,还可以将 x 比例设置为 -1。

  2. 如果您的相机从上往下看,请使用以下代码:

倒置视图的代码:

// 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM