我正在使用 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);
}
现在这工作得很好。
如果玩家跳入墙壁,就会出现问题。如果我在跳跃后保持方向按钮“朝向”墙壁,他就会悬浮在半空中。在碰撞中,似乎将两个轴上的运动减少到零。如果我松开方向,他会正常跌倒。另一个轴上的碰撞工作正常。我可以毫无问题地撞到头或走路。
我错过了一些明显的东西吗?