【问题标题】:Off-center rotate object in UnityUnity中的偏离中心旋转对象
【发布时间】:2019-01-13 11:17:31
【问题描述】:

我在 Unity3D 中有一个激光炮塔,我想将其转向敌人。炮塔由一个“腿”和一个“头”组成(图上选1)。头部可以围绕球形关节平移和倾斜。

我执行以下操作:

    Vector3 targetDir = collision.gameObject.transform.position - turretHead.transform.position;
    float step = turnSpeed * Time.deltaTime;
    Vector3 newDir = Vector3.RotateTowards(turretHead.transform.forward, targetDir, step, 0.0f);
    turretHead.transform.rotation = Quaternion.LookRotation(newDir);

问题在于,由于头部的枢轴与激光束不对齐,炮塔转向几乎正确的方向,但它在目标上方射击。 (如果激光从枢轴的红轴射出,它会完美命中。)

除了自己进行计算之外,是否有内置方法或一些技巧来实现正确的功能?

【问题讨论】:

    标签: c# unity3d 3d rotation quaternions


    【解决方案1】:

    好的,这是执行此操作的快速简便的方法。使用适当的触发可能会“更好”,但这应该会很快为您提供您想要的结果:

    如果您还没有与枪管对齐的变换,则创建一个空游戏对象并将其对齐(确保它是炮塔的子对象,以便它们一起移动)。添加对脚本的引用以进行转换。

    然后,在您的第一行中,根据新的 Barrel 变换而不是 turretHead 变换进行计算。让其他一切保持不变。这样,它从炮塔枪管计算,但移动炮塔头。

    现在,这种方法并不完美。如果枢轴中心与桶变换的偏移太大,那么在大移动或瞄准附近物体时,它的准确度会降低,因为瞄准时的预期位置将不同于初始位置,因为旋转枢轴在别处.但这可以通过迭代来解决,因为计算越接近预期目标,就会变得越准确。

    【讨论】:

    • 正如你所说,这不是一个数学上正确的解决方案,但我尝试过,它在我的情况下完美运行!
    • 看看RotateAround方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2021-08-10
    • 1970-01-01
    • 2020-12-29
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多