在 Unity 中使用反向运动学翻转 2D 角色

Flip a 2D character, using inverse kinematics, in Unity

我在 Unity 中使用 Sprites And Bones 绑定了一个 2D 角色,我使用反向运动学为其设置动画。

但是如果我想翻转 X 轴,我的角色就​​会发疯:

我有一个附加到 "Karateka" 的脚本,包含一个简单的 Flip() 函数:

public void Flip(){
    facingRight = !facingRight;
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
}

我在 Unite 2014 - 2D Best Practices In Unity 的另一个 IK 脚本 Simple CCD 中有同样的效果,所以我可能只是做了一些愚蠢的事情。

如何正确翻转我的角色?

编辑(马克):

我用它来工作:

public void Flip(){
    facingRight = !facingRight;
    /*
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
    */

    GameObject IK = GameObject.Find ("IK");
    GameObject skeleton = GameObject.Find ("Skeleton");

    Vector3 ikScale = IK.transform.localScale;
    ikScale.x *= -1;
    IK.transform.localScale = ikScale;

    if (facingRight) {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 180.0f, skeleton.transform.localEulerAngles.z);
    } else {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 0.0f, skeleton.transform.localEulerAngles.z);
    }
}

好的,正如我们在评论中讨论的那样,总结一下:
1) 你没有翻转所有东西 and/or 没有正确重置骨骼,这就是翻转 "falls apart" 动画的原因
2) 可以做一个 SpriteRenderer.flip[X/Y] 但这应该在 sprite
的每个元素上完成 3) 骨架脚本有一个 "Edit mode" 复选框。当它被选中并使用 scale.x *= -1 翻转角色时,可以看到除了骨头 之外的所有东西 都被翻转了

最后但并非最不重要的一点是,问题已更新为提供问题 "code level solution" 的代码片段。

感谢您分享所有详细信息 Cyrille 以及很高兴能帮上忙。

也可以只将预制件的根部(这里是空手道)在 Y 轴上旋转 180°。

2D 精灵实际上是 2 面 3D 网格,将它们在 Y 轴上旋转 180° 与翻转渲染效果相同,如果 IK 以对象的根为父级,它们将跟随旋转,并且所有动画都可以。