Unity学习记录03:人物跳跃,二段跳,跳跃手感优化可能办法

目录

1、普通跳跃(无限制

2、一段跳

3、二段跳

4、跳跃手感优化

4.1手感优化途径1

4.2手感优化途径2

4.3小总结

5、总结


人物跳跃,二段跳,跳跃手感优化可能办法

1、普通跳跃(无限制

    private float jumpForce = 13;//根据需要调整
    private Rigidbody2D rbody;

    private void Start()
    {
        rbody = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        if (Input.GetButtonDown("Jump"))
        {
            rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
        }
    }

        这样写代码的话,对人物跳跃没有任何限制,可以无限跳跃(感觉就跟飞起来了一样,汗颜

2、一段跳

        先在人物上建一个空物体作为子物体,命名为foot。然后将foot移动到人物的脚的位置(参考见下图

代码如下:

    private float jumpForce = 13;//数字大小根据需要调整

    public Transform playerFoot;    //人物的脚
    private bool isGround;          //人物在不在地面上

    private Rigidbody2D rbody;

    private void Start()
    {
        rbody = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        isGround = Physics2D.OverlapCircle(playerFoot.position, 0.2f, LayerMask.GetMask("Ground"));

        if (Input.GetButtonDown("Jump"))
        {
            if (isGround)
            {
                rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
            }
        }
    }

注意事项:

  • 一定要记得把foot那个物体拖到挂载脚本的playerFoot上。
  • 给地面设置Layer为Ground(看下图

如果没有Ground这个层级的话就要鼠标点击旁边的三角符号去添加层级(层级名字可以按自己需求来起名,只要跟代码相对应就好了)

小总结

        上面的代码就是要检测人物有没有在地面上,只有在地面上才能按空格键进行跳跃

3、二段跳

        一般来说,二段跳已经能够满足大部分需求了

    private float jumpForce = 13;

    public Transform playerFoot;
    private bool isGround;
    private bool isCanDoubleJump;//能不能进行二段跳

    private Rigidbody2D rbody;

    private void Start()
    {
        rbody = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        isGround = Physics2D.OverlapCircle(playerFoot.position, 0.2f, LayerMask.GetMask("Ground"));

        if (isGround)
        {
            //在地面的话符合二段跳条件
            isCanDoubleJump = true;
        }

        if (Input.GetButtonDown("Jump"))
        {
            if (isGround)
            {
                //按下空格键而且在地面,进行一段跳
                rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
            }
            else if (!isGround && isCanDoubleJump)
            {
                //按下空格键而且不在地面,又符合二段跳条件,进行二段跳
                isCanDoubleJump = false;//设置二段跳条件为假
                rbody.velocity = new Vector2(rbody.velocity.x, jumpForce);
            }
        }
    }

        二段跳是在前面的基础上进行改进的。设置一个bool值 isCanDoubleJump ,用来标记人物能不能进行二段跳。当人物在地面上的时候,就设置为true,当人物已经进行二段跳的时候设置为false。

4、跳跃手感优化

        上面的代码在控制人物跳跃的时候,手感比较差,人物给人的感觉就是要飘起来了。

        能找到的优化方案只有一个,就是加大物理重力。下面是俩个途径去加大重力效果

4.1手感优化途径1

        直接在人物脚本挂载的Rigidbody2D组件上的Gravity Scale上修改,把他写成4、5倍放大效果就好了。

4.2手感优化途径2

        另外一种放大Gravity的方法就是在project setting上的physics 2D的Gravity的Y值修改(如下图标记的位置

        注意:这里修改的话要注意写成负数!!!

        也是把它放大几倍就好了,默认是-9.81,那么就是把-9.81×n即可

4.3小总结

        把重力放大几倍,然后再根据上面的jumpForce的值(或者代码中相似作用的属性的值),这俩者配合着修改,然后达到一个比较好的手感就好了

5、总结

        总结了一下现学阶段比较可行的跳跃办法以及优化办法。如果后面有看见更好的优化方法再来补充吧,或者评论区大佬赐教(膜拜

        关于三段跳的话,在这里写一下我的思路吧,记录一下。

        如果要进行三段跳,或者更多次数的跳跃,可以多加一个int jumpCount = 3的变量,然后每跳跃一次就次数--,jumpCount为0时不能再跳跃了。

        然后当人物在地面上的时候,把次数jumpCount重新定义为3。

        大概这样设置应该是可行的,有时间再试试,over

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值