2D游戏入门——小狐狸系列(十六)利用动画事件解决青蛙跳跃bug

Session16:Animation Events动画事件

解决问题

首先有一个问题,就是人物从高处下落的时候不是falling动画,我们需要在 SwitchAnimation() 里添加以下语句

		if(rb.velocity.y < 0.1f && !coll.IsTouchingLayers(ground))
        {
            animator.SetBool("falling", true);
        }

只要人物没有接触地面并且y轴速度小于0.1,就切换为falling动画

Animation Event

依旧仿照之前的方法,为青蛙创建idle和jump的动画效果,并创建状态机的转换,设置过渡条件

image-20211103192106124

添加代码:

	private Animator animator;

	void Movement()
    {
        if(faceLeft)
        {
            if(coll.IsTouchingLayers(ground))
            {
                animator.SetBool("jumping", true);
                rb.velocity = new Vector2(-speed, jumpSpeed);
            }
                
            if(transform.position.x < leftx)
            {
                transform.localScale = new Vector3(-1, 1, 1);
                faceLeft = false;
            }
        }
        else
        {
            if (coll.IsTouchingLayers(ground))
            {
                animator.SetBool("jumping", true);
                rb.velocity = new Vector2(speed, jumpSpeed);
            }

            if (transform.position.x > rightx)
            {
                transform.localScale = new Vector3(1, 1, 1);
                faceLeft = true;
            }
        }
        
    }

相较于之前的改动是:

因为青蛙要跳动,所以要添加一个y轴方向的速度。

但这样写青蛙一直接触地面,就会一直处于jumping的状态,没法回到idle,所以我们需要新的方法来解决这个问题,让每次跳完都回到idle状态,我们需要用到Aniamtion Event,在Animation界面可以找到,点击add event,右边就会出现一个小东西

image-20211103192158419

我们可以挪动event的位置,并可在右侧设置想要执行的函数,我们想要执行Movement(),把它添加进去

image-20211103192219976

这样青蛙每一次执行了idle的动画之后,就会自动调用Movement()函数,进行一次jump。

最后添加一个切换动画的函数:

	void SwitchAnimator()
    {
        if (animator.GetBool("jumping"))
        {
            if(rb.velocity.y < 0.1f)
            {
                animator.SetBool("jumping", false);
                animator.SetBool("falling", true);
            }
        }
        if (coll.IsTouchingLayers(ground) && animator.GetBool("falling") )
        {
            animator.SetBool("falling", false);
        }
    }

在Update()里调用就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值