我正在 Unity 中制作 2D 游戏。我添加了一个 2D 盒子对撞机和一个圆形对撞机作为我的精灵角色的触发器。角色站立的平台也有一个 2D 盒子对撞机。因此,当我的角色移动到平台边缘附近时,它会经历一种力或某种将其拉离边缘的东西。你可以认为它是一种保护力量,可以帮助你的角色不掉下飞机,但问题是这种力量不是游戏的一部分,这就是为什么它不应该存在的原因。以下是我用来移动角色的代码:
// call this method to move the player
void Move(float h)
{
// reduces character velocity to zero by applying force in opposite direction
if(h==0)
{
rigidBody.AddForce(new Vector2(-rigidBody.velocity.x * 20, 0.0f));
}
// controls velocity of character
if(rigidBody.velocity.x < -topSpeed || rigidBody.velocity.x > topSpeed)
{
return;
}
Vector2 movement = new Vector2 (h, 0.0f);
rigidBody.AddForce (movement * speed * Time.deltaTime);
}
这是属性的图像的图像。如果我继续推动角色,它会从边缘掉下来,但如果我只靠边缘停下来,不需要的保护力会将它拉回到平面上。
此外,如果角色撞到另一个 2D 盒子对撞机,它会反弹回来,而不仅仅是摔倒。
编辑- 弹跳效果主要出现在玩家在跳跃时撞到其他物体时。跳跃的代码是
void Update()
{
// The player is grounded if a linecast to the groundcheck position hits anything on the ground layer.
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
// If the jump button is pressed and the player is grounded then the player should jump.
if(Input.GetButtonDown("Jump") && grounded)
jump = true;
}
void Jump()
{
if (jump)
{
jump = false;
rigidBody.AddForce (Vector2.up * jumpSpeed * Time.deltaTime);
}
}