让孩子不受父母轮换Unity的影响

New*_*dio 1 unity-game-engine unityscript

我的角色里面有2个游戏对象说right_obj和left_obj,我希望他们忽略父旋转,就像玩家改变它的方向(左,右),这两个游戏对象保持他们的位置和旋转,到目前为止我使用2种方法但是失败.这是我的代码,我在我的两个游戏对象上使用这个脚本,但他们忽略了这一行

// first one approch
Quaternion rotation;
void Awake()
{
    rotation = transform.rotation;
}

void LateUpdate () 
{
    transform.rotation = rotation;
}

// 2nd approch
void LateUpdate () 
{
    transform.rotation = Quaternion.identity;;
}
Run Code Online (Sandbox Code Playgroud)

Lev*_*ode 7

你真的需要这种关系吗?
如果你真的不需要父/子关系,你可以在0,0,0处产生一个空的GameObject,并在场景中间产生实际的父和子作为GameObject的子节点,这样它们仍然会被分组在某种关系中,而不是父亲/孩子,你会得到兄弟/兄弟的关系,使第一个独立于第二个.

如果你需要让两个对象相互依赖,但不是每一个方面,因为它应该在父/子中尝试使用父约束

通过这种方式,您将获得这种类型的层次结构:
- 父亲GO(在0,0,0)
- Child1(您的实际父亲)
- Child2(您的实际孩子)

Child1和Child2通过ParentConstraint同步位置,但不是它们的轮换.

除此之外,除了对孩子施加相反的旋转之外别无他法.


小智 5

您还可以使用旋转约束组件。这与上面提到的父约束类似,但在我看来更容易理解 - 它只使用旋转,并且仅使用您插入的游戏对象的旋转。

您只需创建一个空的游戏对象并将旋转设置为 0,0,0 ,然后将此空的游戏对象设置为旋转约束的源。我在我的游戏中有这个精确的设置,它覆盖了实际父级的旋转,这就是我想要的。

也许不是绝对最干净的解决方案,但这是值得考虑的事情。

这是文档链接 - https://docs.unity3d.com/Manual/class-RotationConstraint.html


小智 5

如果您确实不想破坏父子层次结构,则可以每帧旋转子级以抵消父级旋转。假设我们有以下场景,

在此输入图像描述

将以下内容添加RestoreOriginRotation.cs到子对象中,我们可以获得稳定的子对象旋转。

在此输入图像描述

我们能得到什么。

在此输入图像描述

****如果您不关心底层数学,您应该到此为止。***

在此输入图像描述

  • 优秀的答案和解释很有道理,虽然晚了但值得 (2认同)