如何解决在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。