Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 统一动画后如何保持精灵的位置?_Animation_Unity3d_Unity5_Unity3d 2dtools - Fatal编程技术网

Animation 统一动画后如何保持精灵的位置?

Animation 统一动画后如何保持精灵的位置?,animation,unity3d,unity5,unity3d-2dtools,Animation,Unity3d,Unity5,Unity3d 2dtools,我最近刚开始使用Unity3D,这是我的第一个游戏,所以如果我没有做我应该做的事情,请告诉我 有一个2D角色,我想使用动画机制向前移动一步。此运动可分为两部分: 后腿向前移动,上身不要移动 用这条腿推动并迈出这一步,移动上半身 我的问题是我找不到一种方法使这一步永久化。一旦它开始在“空闲”动画上循环,它就会返回到原始位置(步骤之前) 我不知道如何让我的角色保持在“前进”动画和“空闲”动画之间的位置 我试图在双脚和地板上添加“刚体2D”、“框碰撞器2D”和“Physics2D材质”,但这有

我最近刚开始使用Unity3D,这是我的第一个游戏,所以如果我没有做我应该做的事情,请告诉我

有一个2D角色,我想使用动画机制向前移动一步。此运动可分为两部分:

  • 后腿向前移动,上身不要移动
  • 用这条腿推动并迈出这一步,移动上半身

我的问题是我找不到一种方法使这一步永久化。一旦它开始在“空闲”动画上循环,它就会返回到原始位置(步骤之前)

我不知道如何让我的角色保持在“前进”动画和“空闲”动画之间的位置

我试图在双脚和地板上添加“刚体2D”、“框碰撞器2D”和“Physics2D材质”,但这有点破坏了IK脚本(“简单CCD”,来自youtube视频“Unite 2014-Unity中的2D最佳实践”)。我相信有一个更简单的方法

编辑:我的问题不够清楚。空闲动画是默认动画,其中角色不做任何特别的事情。它只是在原地移动了一下。当它运行“向前一步”时,所有精灵都会移动(仅当后腿推动时)。如果现在停止所有动画,则角色确实处于新位置,更接近其对手。我可以通过删除从“前进”到“空闲”的转换来检查这一点。但从这里开始,我希望它在空闲动画上循环。当完成从“前进”到“空闲”的转换时,角色不是从其新位置空闲运行,而是从该步骤之前的旧位置空闲运行,就好像它是从后拉的一样。我想从新位置空转

下面是一个较长的gif,我们可以看到更多的空闲动画:

我的层次结构面板如下所示:

  • 主摄像机
  • Karateka(顶级游戏对象容器,带有
    动画师
    组件)
    
    • 躯干(精灵)
      • 右臂
      • 右腿
        • 右小腿
          • 右脚
    • IK(反向运动学目标)
      • 左拳靶
      • 左脚目标

任何建议都是受欢迎的。

< P>如果我做对了,你就有了向前的动画运行,它在中间被剪掉,变为空闲。此时,将再次触发StepForward动画,但从开始时开始,您希望从停止的位置重新启动:

您可以记录“前进”动画的规格化值,并在下次使用:

   float normValue = this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
然后可以使用该值:

 this.animator.Play("StepForward", 0, normValue);
另一种可能是,您不想这样做,只是想暂停动画而不进入空闲状态

使用参数。可以在Animator窗口(左上角)中添加浮点参数(称为方向)。然后在动画师中选择一个状态,它将在检查器中打开动画设置。在“速度”下,打开应显示新参数的下拉列表。并勾选它

现在,方向浮动将影响动画的速度,如下所示:

this.animator.SetFloat("direction", value);

如果给0,则暂停。退1步向前。您还可以删除该值,使其不突然。你的方式。

我想,我不是很清楚,对不起。空闲动画运行正常,然后,我运行StepForward,角色按预期向前移动。如果我将后过渡移到空闲,角色将保持在其新位置。现在从它的新位置开始,我希望它在空闲动画上循环。但是,如果我保持从“前进”到“空闲”的过渡,我的角色将移回其原来的位置,在“前进”动画之前。我不知道GetCurrentAnimatorStateInfo,它可能会在以后派上用场,谢谢。我将对问题进行编辑,使其更加清晰。是否前进动画会影响顶部对象的位置?假设动画应该将对象从0移动到1,如果它位于顶部对象上,unity会将其放置在任何位置的0处。现在,如果您添加一个父对象并影响哪个气体成为第一个子对象,它将在父空间(局部空间)中从0移动到1。然后无论父对象在哪里,它都会在当前世界中设置为0,而不是整个世界。是的,这是有意义的。我有一个游戏对象,包含机器人精灵(上半身位于层次的顶部)和IK目标。如果我只移动精灵和IK目标,我的顶部游戏对象不会移动。在“前进一步”动画结束时,我将尝试获取移动开始和结束之间的距离,然后将顶部的游戏对象移到一边,将包含的游戏对象移到另一边。看起来我仍然不明白。在我的最后一个关键帧上,我平移了顶部游戏对象和IK目标,然后我将躯干游戏对象重置为0,但它不会改变最后的拉动效果。我用
transform.localPosition.x
测试了代码的翻译,它没有按我想要的方式移动,但是它移动了(我在步骤开始时,为动画设置了触发器之后,移动了它)。我想我可以从这里着手,但这看起来是个糟糕的解决方案。我认为有一种更简单的方法。总的来说,在动画中,顶部的对象包含了动画师,但它只控制子对象(不总是)。顶部对象由脚本控制以进行移动和其他操作。动画的问题在于它不做(当前+动画移动),它只是获取动画上的值并应用它。您的动画应该只考虑子对象的值,而另一个脚本则控制子对象的值。该脚本可能会随着动画移动对象。我想您还没有尝试过根动画。我是