2

我在 Unity 中有一个带有Sprites 和 Bones的 2D 角色,我使用反向运动学对其进行动画处理。

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

IK 翻转

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

public void Flip(){
    facingRight = !facingRight;
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
}
  • “Karateka”只是骨骼、精灵和 IK 目标的容器
  • “Skeleton”包含 Sprite And Bones 中的 Skeleton 脚本
  • “右腿骨”、“右小腿骨”等有骨骼和IK脚本
  • “右腿”、“右小腿”等是精灵
  • “IK”包含所有 IK 目标

我对Unite 2014 - Unity 中的 2D Best Practices的其他 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);
    }
}
4

2 回答 2

2

好的,正如我们在评论中讨论的那样,总结一下:
1)你没有翻转所有东西和/或没有正确重置骨骼,这就是动画在翻转时“崩溃”的原因
2)一个人可以做一个SpriteRenderer.翻转[X/Y] 但这应该在精灵的每个元素上完成
3) 骨架脚本有一个“编辑模式”复选框。当它被选中并使用 翻转角色scale.x *= -1时,可以看到除了骨骼之外的所有东西都被翻转了

最后但并非最不重要的一点是,问题得到了更新,代码片段为该问题提供了“代码级解决方案”。

感谢您分享 Cyrille 的所有细节,我很高兴能提供帮助。

于 2016-10-10T15:46:21.270 回答
0

也可以在 Y 轴上将预制件(此处为 Karateka)的根部旋转 180°。

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

于 2021-06-28T09:33:50.543 回答