之前一提起角色的跳跃,想当然的想法就是:给角色一个向上的初速,然后由Unity的物理系统接管就好了嘛,这样忽略空气摩擦的影响,根据重力加速度,角色向上跳到最高点的时间和由最高点落下的时间相等,不是很合理嘛。最近看了几篇文章才发现,这样的想法是错误的。

仔细观察马里奥这类经典平台跳跃游戏其实可以发现,角色向上运动的过程占的帧数达到跳跃全过程总帧数的约2/3,就是说其实马里奥下落的更快。这样设计的原因就是如果角色上下的时间相等,会在下落时给玩家带来一种漂浮感,这是我之前没有仔细考虑的。

那么如何优化呢?加入几行代码即可:

public float fallmultiplier = 2.5f;
    public float lowmultiplier = 2f;

    Rigidbody2D rb;

    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        if (rb.velocity.y < 0)
        {
            rb.velocity += Vector2.up * Physics2D.gravity.y * (fallmultiplier - 1) * Time.deltaTime;
        } 
        else if (rb.velocity.y > 0 && !Input.GetButton("jump"))
        {
            rb.velocity += Vector2.up * Physics2D.gravity.y * (lowmultiplier - 1) * Time.deltaTime;
        }
    }

当物体向下运动时添加系数fallmultiplier 使下落时加速度更大。

上面第二段条件语句里面还实现了玩家轻按跳跃键时跳不高,只有长按才跳得高的设定。

 

posted on 2022-02-10 17:51  dollyandkalin  阅读(197)  评论(0编辑  收藏  举报