Unity动画后如何保持精灵位置?

时间:2016-10-04 13:51:59

标签: animation unity3d unity5 unity3d-2dtools

我刚刚开始使用Unity3D,这是我的第一款游戏,所以如果我不做我应该做的事情,请告诉我。

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

  • 向前移动后腿,不要移动上半身;
  • 使用此腿推动步骤,移动上半身。

enter image description here

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

enter image description here

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

我尝试在脚和地板上添加“Rigidbody 2D”,“Box Collider 2D”和“Physics2D Material”,但它有点打破了IK脚本(“Simple CCD”,来自youtube视频“Unite 2014” - Unity中的2D最佳实践“)。而且我确信有一种更简单的方式。

编辑:我的问题不够明确。空闲动画是默认动画,其中角色没有特别做任何事情。它只是在移动一段时间才能保持原位。当它运行“前进”时,所有精灵都会移动(仅当后腿推动时)。如果现在停止所有动画,那么角色确实处于一个新的位置,更接近它的对手。我可以通过删除从“前进”到“空闲”的转换来检查。但是从这里开始,我想让它循环播放Idle动画。当完成从“前进”到“空闲”的转换时,角色不会从它的新位置空闲,而是从它的旧位置开始,在步骤之前,好像是从后面拉出来的。我想从新职位开始闲置。

当我们看到更多空闲动画时,这是一个更长的gif:

enter image description here

我的Hierarchy面板如下所示:

  • 主摄像头
  • Karateka(顶部GameObject容器,带有Animator组件)
    • 躯干(精灵)
      • 右臂
      • 右腿
        • 右小腿
          • 右脚
      • ...
    • IK(反向运动学目标)
      • 左拳目标
      • 左脚目标
      • ...

欢迎提出任何建议。

1 个答案:

答案 0 :(得分:3)

如果我做对了,你就会运行StepForward动画,然后在中间切回到空闲状态。在那里,StepForward动画再次触发但是从一开始你就想从你离开的地方重新开始:

您可以记录StepForward动画的标准化值,并在下次使用它:

   float normValue = this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime;

然后您可以使用该值:

 this.animator.Play("StepForward", 0, normValue);

其他可能性,你不是在那之后,而只是想要暂停动画而不进入空闲状态。

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

现在,您的方向浮动会影响动画的速度:

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

如果你给0,你就暂停。回馈1继续前进。您也可以使值变为不突然。你的方式。