如何在 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;
}
我有三个游戏对象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;
}