在Unity中旋转对象时,脚本不会在Z轴上旋转对象,仅在X和Y轴上旋转?

问题描述

我有一个矩形立方体,需要将其放置在其他两个对象之间,并且它会适当旋转以使每个末端都面向两个对象。由于这是在球形世界上发生的,因此问题出在我尝试将其对齐以使其正确面向上时。我以前没有意识到这一点,但是此代码(可在其他对象上工作,因为它们只需定向一次)仅使用X和Y轴。我可以通过在编辑器中修改Z轴来适当地手动调整它们的方向,因此我知道这是可能的,但是由于必须按程序创建它们,因此显然不可行。从transform.up更改为down或right绝对不会改变。

在下面的代码中,父对象是它必须面向的对象之一(它确实很好),而目标是球体的中心。

理论上,与两个侧面对象的对齐只需要使用X和Y轴,然后到球体中心的对齐就只需要使用Z轴即可,如代码的最后一行所示,但实际上,这并不起作用,因为两个路线都只想使用X和Y轴,而忽略Z轴。

        Vector3 parentDirection = parent.transform.position - transform.position;
    Vector3 targetDirection = target.position - transform.position;

    Vector3 DirectionToParent = Vector3.RotateTowards(transform.forward,parentDirection,100f,0.0f);
    Vector3 CenterDiretion = Vector3.RotateTowards(transform.forward,targetDirection,0.0f);

    Quaternion ParentRotation = Quaternion.LookRotation(DirectionToParent );
    Quaternion CenterRotation = Quaternion.LookRotation(CenterDiretion );

    transform.rotation = Quaternion.Euler(DirectionToParent.eulerAngles.x,DirectionToParent.eulerAngles.y,newRotation.eulerAngles.z);

解决方法

该问题中显示的代码不起作用,因为在计算transform.rotation时,该代码未考虑到/远离行星中心的方向。

相反,我建议仅使用Quaternion.LookRotation来分配旋转,该旋转将产生具有parentDirection的正向旋转,以及与行星向上方向最接近的旋转。

Vector3 upDirection = transform.position - target.position;
transform.rotation = Quaternion.LookRotation(parentDirection,upDirection);

如果您需要基于最大速度更改旋转,只需将Quaternion.LookRotation的结果分配给变量,并将transform.rotation中的Quaternion.RotateTowards分配给{{1 }}:

transform.rotation

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...