在X轴上的碰撞意味着在Y轴上的0移动

本文关键字:移动 意味着 碰撞 | 更新日期: 2023-09-27 18:15:35

我正在Unity中使用2D引擎开发一款平台游戏。我的玩家角色有一个BoxCollider2D和一个RigidBody,还有一些带有BoxColliders的"墙"。

现在,我从另一个项目复制了移动播放器的脚本,并做了一些改变。与运动有关的部分如下:
public void FixedUpdate()
    {
        physVel = Vector2.zero;
        // move left
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            physVel.x = -runVel;
        }
        // move right
        if(Input.GetKey(KeyCode.RightArrow))
        {
            physVel.x = runVel;
        }
        // jump
        if(Input.GetKey(KeyCode.UpArrow))
        {
            if(jumps < maxJumps)
            {
                jumps += 1;
                if(jumps == 1)
                {
                    _rigidbody.velocity = new Vector2(physVel.x, jumpVel);
                }
            }
        }
        //Apply gravity
        _rigidbody.AddForce(-Vector3.up * fallVel);

        // actually move the player
        _rigidbody.velocity = new Vector2(physVel.x, _rigidbody.velocity.y);
    }

现在运行得很好。

如果玩家跳到墙上,问题就出现了。如果我在跳跃后保持方向按钮"朝向"墙壁,他就会悬浮在半空中。在碰撞中,两个轴上的运动似乎都减少到零。如果我松开方向,他就会正常下落。另一个轴上的碰撞很好。我可以撞到头或走路,没有问题。

我错过了什么明显的吗?

在X轴上的碰撞意味着在Y轴上的0移动

编辑:尝试在玩家和墙壁上添加一个摩擦为0的材料,看看会发生什么,如果它停止了,那就是摩擦错误。