Unity引擎2D游戏开发,实现跳跃动画

发布时间 2023-12-14 17:19:09作者: 心霖の雨

image

由于跳跃动画分为了很多个部分,所以需要对每个部分进行重新命名。
接着,再将此动画分为两大类,一类空中动作(Jump animation),一类落地动作(Landing animation)

选择Player人物,在下方Animation中,新建动画

动画新建和命名规则,根据guide内的颜色分类来进行
image

新建动画混合树

由于动画太多,也进行了分类,则选用动画混合树(Blend Tree)。在Animator窗口中鼠标右击进行创建,并命名为Jump
image

操作动画混合树,加入之前创建的动画,并设置相关参数

右上角BlendType为混合参数类型,1D为单一参数、2D为2维向量参数。由于跳跃是需要通过Y轴参数来控制,因此在左侧窗口新建一个velocityY参数
image

接着,将之前创建的动画全部加入混合树,并且设置好Threshold值。此值为人物跳跃Y轴的变化值,BlueJump1 13为人物2D刚体内velocity Y轴为13数值时,该动画从BlueJump1开始播放
image

将新建的velocityY变量写入Animation C#代码中

将velocityY变量写入SetAnimation方法内,使其实时获取RigidBody刚体中Y轴速度的值

animator.SetFloat("velocityY", rigidbody.velocity.y);

对Animation的进入条件进行操作,并对新参数进行C#编码

跳跃动作只要离开地面在空中就开始执行,所以在左侧加入一个新的参数isGround
image

在PlayerAnimation C#代码中,写入新代码,进行实时赋值

animator.SetBool("isGround", physicsCheck.isGround);

根据需要,可以使跳跃动作优先级最高,从而让跳跃动作可以打断其他一切动作。那么就把Any State连接到Jump上,意为任何状态都可以进入跳跃动画。
image

并且在下方加入IsGround参数,并设置为false。意为,不在地面就执行Jump动画
image

然后把连线数值根据需要全部关闭。
image

因为人物落地动画是通过跳跃的空中动画进入的,所以将Jump动画连接到OnLand动画
image

连线数值
image

并且在下方,加入isGround参数。因为在空中才能进行落地动作,所以赋值为True
image

接着,落地动画进入待机动画
image

因为只要落地动画播放完毕,就可以进入待机动画,所以连线数值中,Exit Time设置为1,即完整播放一遍。
image

最后,落地动画播放与否,加一个条件。如果落地立即开始奔跑或者走路,凡是X轴方向有了速度,则不进行落地动画(因为会有落地动画在漂移的动作)。所以,将OnLand动画连接到Exit上。
image

只要X轴方向速度大于0.1,有速度了,就退出落地动画,并取消上面的参数。
image