在Unity

时间:2016-10-10 12:10:44

标签: unity3d unity3d-2dtools unity3d-5 inverse-kinematics

我在Unity中有一个装有Sprites And Bones的2D角色,我使用反向运动来为它制作动画。

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

IK flipping

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

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

我与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);
    }
}

2 个答案:

答案 0 :(得分:2)

好的,正如我们在评论中讨论的那样,只是总结一下:
1)你没有翻转所有东西和/或没有正确地重置骨骼,这就是为什么动画片会崩溃的原因#34;在翻转上 2)可以执行--Select @Sql。翻转[X / Y]但这应该在精灵的每个元素上完成 3)骨架脚本有一个"编辑模式"复选框。当它被检查并且使用SpriteRenderer翻转角色时,可以看到除了骨骼之外的所有都被翻转

最后但并非最不重要的是,问题已经通过代码片段进行了更新,提供了代码级解决方案"关于这个问题。

感谢分享所有细节Cyrille以及我很高兴我能提供帮助。

答案 1 :(得分:0)

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

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