2D游戏入门——小狐狸系列(二十)为人物添加下蹲动画

Session20:趴下效果Crouch

这节课我们来为主角添加趴下的效果

添加新的Button

打开Project Setting -> Input Manager,我们发现Unity并没有内置的下蹲按键,所以我们需要添加一个,可以选中Jump,右键点击Duplicate,复制一个Input按键出来,改名为Crouch,并更改按键。

image-20211104155142145

我们可以使用这种方法添加任意自己想要的按键效果。

添加下蹲效果

然后就可以为角色添加动画和代码了,动画部分略过,代码如下

	void Crouch()
    {
        if(Input.GetButtonDown("Crouch"))
        {
            animator.SetBool("crouching", true);
        }else if(Input.GetButtonUp("Crouch"))
        {
            animator.SetBool("crouching", false);
        }
    }

解决bug

添加动画和代码之后,我们的角色可以下蹲了,但仍然无法穿过这样的物体:

image-20211104160852014

这是因为角色的碰撞体没有改变,这里我们采用的解决方法是当角色下蹲时取消头顶的方形collider

代码中添加:

	public Collider2D Discoll;

	void Crouch()
    {
        if(Input.GetButtonDown("Crouch"))
        {
            //按键按下
            animator.SetBool("crouching", true);
            Discoll.enabled = false;
        }else if(Input.GetButtonUp("Crouch"))
        {
            //按键抬起
            animator.SetBool("crouching", false);
            Discoll.enabled = true;
        }
    }

回到Unity,将box collider拖过去,这样就可以穿过去了,但这样还有个问题,就是如果在中间取消下蹲,人物回到idle之后会卡住

image-20211104161732643

所以我们需要更改一下代码逻辑:当角色头顶没有属于Ground图层的物体时才可以回到idle。

	//检测用的
	private bool checkHead = false;	

	private void Crouch()
    {
        if (Input.GetButtonDown("Crouch"))
        {
            animator.SetBool("crouching", true);
            //关闭box collider
            Discoll.enabled = false;
        }
        else if (Input.GetButtonUp("Crouch"))
        {
            //开启检测
            checkHead = true;
        }
        //检测头部是否有ground
        if(checkHead)
        {
            //overlap是重叠的意思,这个函数的作用是检查是否有碰撞体进入了指定的圆形区域
            //当角色头顶没有ground的碰撞体时才可以恢复idle状态
            if (!Physics2D.OverlapCircle(ceilingCheck.position, 0.2f, ground))
            {
                animator.SetBool("crouching", false);
                Discoll.enabled = true;
                //关闭检测
                checkHead = false;
            }
        }
        
    }

当松下下蹲的按键时,会开启检测,检测内容就是头顶有没有ground,没有的话就可以站起来回到idle。

这里还有个bug,就是人物在idle状态时同时按下下蹲按键,会直接以run的状态穿过上面的那种物体。原因是只要我们按下下蹲按键crouching就变为true,并把头部的碰撞体关闭,而我们从idle过渡到run也是一瞬间的事情,所以实际上是角色先进入了run,再进入的crouch,而run没有到crouch的过渡,角色就会以run的状态穿过物体,而且此时碰撞体是关闭的,可以正常通过。

解决方法就是添加run->crouch的过渡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值