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

时间:2014-07-30 16:59:29

标签: c# unity3d collision unity3d-2dtools

我正在使用2D引擎在Unity中开发平台游戏。我的玩家角色有一个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);
    }

现在这完全正常。

如果玩家跳入墙壁,就会出现问题。如果我保持方向按钮捣碎&#39;朝向&#39;跳墙后,他被悬挂在半空中。因为在碰撞中似乎是将两个轴上的运动减少到零。如果我释放方向,他会正常下降。另一轴上的碰撞工作正常。我可以毫无问题地撞到我的头上或走路。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

编辑:尝试向玩家和墙壁添加摩擦力为0的材料,看看会发生什么,如果停止则是摩擦错误。