如何在 unity 3d 中停止旋转子子

How to stop rotating sub child in u nity 3d

我有三个游戏对象A、B、C。A是B的父对象,B是C的父对象。A是刚体和主要移动对象。 B 是非刚性变换对象,它从 0,0,0 不断地旋转到 0,0,45。我希望当 B 旋转时,B 的子 C 也旋转但其局部 y 轴必须为 0(锁定)。例如,老式校车的每个雨刷都有一个副雨刷,当主雨刷移动时,副雨刷也随之移动,其轴线保持垂直。这是我想要的。请任何人帮忙...

考虑将以下内容附加到雨刷片的脚本中:

Vector3 desiredRotation;

void Update()
{
    transform.rotation = Quaternion.Euler(desiredRotation + new Vector3(0.0f, 0.0f, transform.parent.rotation.z * -1.0f));
}

这会将 child 的旋转方向更改为 parent 的相反方向。主雨刮转90度,副雨刮-90度抵消。

如果除此之外还想旋转 SubWiper,则需要修改 desiredRotation。

这个解决方案允许你"ignore"直接parent的旋转,但你仍然会跟随grandparent的旋转。 如果你的车上有雨刷,如果车翻了个底朝天,副雨刷不应该保持向上固定,而是应该和车一起转动。车子是grandparent.

最简单的解决方案是简单地让 C object 更新其旋转,以便 transform.up 始终是相同的值。

Vector3 upDir;

void Awake() 
{
    upDir = transform.up;
}

void Update()
{
    transform.up = upDir;
}

如果您有兴趣保持其旋转与祖父母相同,只需将其旋转设置为与祖父母的旋转相同即可:

transform aTransform;

void Awake()
{
    aTransform = transform.parent.parent;
}

void Update()
{
    transform.rotation = aTransform.rotation;
}