繁体   English   中英

unity 2d 玩家无限跳跃

[英]Unity 2d player jumping infinitely

我是 Unity 新手,这是我的第一款游戏,但我的玩家在无限跳跃,我看了很多教程,但仍然不知道如何解决它。

这是我的代码

public float moveSpeed = 5f;

void Update()
{

    Jump();
    Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0f, 0f);
    transform.position += movement * Time.deltaTime * moveSpeed;

    Vector3 characterScale = transform.localScale;
    if (Input.GetAxis("Horizontal") < 0)
    {
        characterScale.x = 1;
    }


    if (Input.GetAxis("Horizontal") > 0)
    {
        characterScale.x = -1;
    }
    transform.localScale = characterScale;
}

void Jump()
{
    
    if (Input.GetButtonDown("Jump"))
    {
        gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 15f), ForceMode2D.Impulse);
    }

    
}

}

你有几样东西。 首先你有Input.GetButtonDown("Jump")这意味着当玩家按住按钮时,它将在 if 语句中执行该脚本,这将施加一个力。 因此,当玩家按住按钮时,它将运行每一帧和每一帧,它将施加该力。 您可以尝试执行Input.GetButtonUp("Jump")当玩家让按钮的 go 时,这将是正确的,然后它将施加该力。 现在,如果那是您想要的感觉,您可以保持GetButtonDown没问题。

但真正的问题是,第二个问题是,您需要检查玩家是否接触地面。 如果他接触地面,那么您可以施加该力。 如果他没有接触地面,则不要施加力。

go 有几种方法可以解决这个问题,最简单的方法是创建一个新层并将其命名为接地或其他东西。

层

您单击该下拉菜单并单击添加图层。然后您可以添加一个图层,然后将 go 回到地面游戏对象并将该图层分配给该图层。 现在假设地面上有一个对撞机,所以玩家不会 go 穿过它。

之后,您需要对玩家对撞机的引用。 Start()方法中,您可以添加以下内容:

private Collider2D myCollider;

void Start()
{
   // This will get a reference to the collider 2d on the player
   myCollider = GetComponent<Collider2D>();
}

void Update()
{
   .
   .
   .
   // This means the player is touching the ground layer.
   if (myCollider.IsTouchingLayers(LayerMask.GetMask("Ground")))
   {
      if (Input.GetButtonDown("Jump"))
       {
          gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 15f), ForceMode2D.Impulse);
       }
   }
}

所以这个脚本做了什么,它获取了玩家对撞机的引用,然后检查玩家对撞机是否接触到地面层。 地面也需要有一个碰撞器,不仅是为了防止玩家从关卡中掉下来,还要触发这个 boolean 的真假。 如果它们相互接触,则为真,如果不接触,则为假。 因此,如果他们没有接触地面,那么无论玩家按下该按钮多少次,他都不会跳跃。 一旦他们这样做了,如果他们按下跳跃,它就会施加跳跃力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM