Unity动画后如何保持精灵位置?
How to keep sprites position after Unity animation?
我最近才开始使用 Unity3D,这是我的第一款游戏,所以如果我没有按照我应该做的去做,请告诉我。
有一个二维角色,我想使用动画机制向前移动一步。这个动作可以分为两部分:
- 后腿前移,上半身不动;
- 用这条腿推动并迈步,移动上半身。
我的问题是我找不到使此步骤永久化的方法。一旦它开始在 "Idle" 动画上循环,它就会回到原来的位置(在步骤之前)。
我不知道如何让我的角色停留在 "Step Forward" 动画和 "Idle" 动画之间的位置。
我尝试在双脚和地板上添加 "Rigidbody 2D"、"Box Collider 2D" 和 "Physics2D Material",但它在某种程度上破坏了 IK 脚本("Simple CCD",从youtube 视频 "Unite 2014 - 2D Best Practices In Unity")。而且我相信还有更简单的方法。
编辑:我的问题不够清楚。空闲动画是默认动画,其中角色没有做任何特别的事情。它只是在原地不动时移动了一点。当它运行s "Step Forward"时,所有精灵都移动了(只有后腿推的时候)。如果现在所有的动画都停止了,那么这个角色确实处于一个新的位置,更接近它的对手。我可以通过删除从 "Step Forward" 到 "Idle" 的过渡来检查这一点。但从这里开始,我希望它循环播放空闲动画。当从 "Step forward" 到 "Idle" 的过渡完成时,角色不是 运行ning 从它的新位置空闲,而是从它的旧位置,在步骤之前,就好像它是从落后。我想运行从新位置闲下来。
这是一个更长的 gif,我们可以看到更多的空闲动画:
我的层次结构面板看起来像:
- 主摄像头
- 空手道(顶级 GameObject 容器,带有
Animator
组件)
- 躯干(精灵)
- 头
- 右臂
- 右腿
- 右小腿
- 右脚
- ...
- IK(反向运动学目标)
- 左拳目标
- 左脚目标
- ...
欢迎提出任何建议。
如果我做对了,你就有了 StepForward 动画 运行 并且它在中间被切回到空闲状态。在那里,StepForward 动画再次触发,但从头开始,您希望从中断的地方重新开始:
你可以记录下你的StepForward动画的归一化值,下次使用:
float normValue = this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
那么您可以使用该值:
this.animator.Play("StepForward", 0, normValue);
其他可能性,您不是在那之后,只是想暂停动画而不进入空闲状态。
使用一个参数。您可以在 Animator window(左上角)中添加一个浮动参数(称之为方向)。然后 select 动画器中的一个状态,它将在检查器中打开动画设置。在速度下,打开应显示新参数的下拉菜单。并勾选它。
现在,您的方向浮动将影响动画的速度:
this.animator.SetFloat("direction", value);
如果你给 0,你暂停。回馈 1 以前进。您还可以对值进行 lerp,使其不突兀。你的方式。
我最近才开始使用 Unity3D,这是我的第一款游戏,所以如果我没有按照我应该做的去做,请告诉我。
有一个二维角色,我想使用动画机制向前移动一步。这个动作可以分为两部分:
- 后腿前移,上半身不动;
- 用这条腿推动并迈步,移动上半身。
我的问题是我找不到使此步骤永久化的方法。一旦它开始在 "Idle" 动画上循环,它就会回到原来的位置(在步骤之前)。
我不知道如何让我的角色停留在 "Step Forward" 动画和 "Idle" 动画之间的位置。
我尝试在双脚和地板上添加 "Rigidbody 2D"、"Box Collider 2D" 和 "Physics2D Material",但它在某种程度上破坏了 IK 脚本("Simple CCD",从youtube 视频 "Unite 2014 - 2D Best Practices In Unity")。而且我相信还有更简单的方法。
编辑:我的问题不够清楚。空闲动画是默认动画,其中角色没有做任何特别的事情。它只是在原地不动时移动了一点。当它运行s "Step Forward"时,所有精灵都移动了(只有后腿推的时候)。如果现在所有的动画都停止了,那么这个角色确实处于一个新的位置,更接近它的对手。我可以通过删除从 "Step Forward" 到 "Idle" 的过渡来检查这一点。但从这里开始,我希望它循环播放空闲动画。当从 "Step forward" 到 "Idle" 的过渡完成时,角色不是 运行ning 从它的新位置空闲,而是从它的旧位置,在步骤之前,就好像它是从落后。我想运行从新位置闲下来。
这是一个更长的 gif,我们可以看到更多的空闲动画:
我的层次结构面板看起来像:
- 主摄像头
- 空手道(顶级 GameObject 容器,带有
Animator
组件)- 躯干(精灵)
- 头
- 右臂
- 右腿
- 右小腿
- 右脚
- 右小腿
- ...
- IK(反向运动学目标)
- 左拳目标
- 左脚目标
- ...
- 躯干(精灵)
欢迎提出任何建议。
如果我做对了,你就有了 StepForward 动画 运行 并且它在中间被切回到空闲状态。在那里,StepForward 动画再次触发,但从头开始,您希望从中断的地方重新开始:
你可以记录下你的StepForward动画的归一化值,下次使用:
float normValue = this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
那么您可以使用该值:
this.animator.Play("StepForward", 0, normValue);
其他可能性,您不是在那之后,只是想暂停动画而不进入空闲状态。
使用一个参数。您可以在 Animator window(左上角)中添加一个浮动参数(称之为方向)。然后 select 动画器中的一个状态,它将在检查器中打开动画设置。在速度下,打开应显示新参数的下拉菜单。并勾选它。
现在,您的方向浮动将影响动画的速度:
this.animator.SetFloat("direction", value);
如果你给 0,你暂停。回馈 1 以前进。您还可以对值进行 lerp,使其不突兀。你的方式。