2015-12-10 43 views
-2

在我的2D遊戲中,我需要我的玩家在跳躍後能夠拉下來。我嘗試在操縱桿上使用垂直控制,但它只是讓我浮動。當我試圖跳躍時,我懸在空中的時間太長了。 我希望能夠向下拉我的播放器。如何在沒有input.getkeydown的情況下獲得這種運動?下面是代碼:跳躍後快下來

public class PlayerControl : MonoBehaviour 
{ 
    [HideInInspector] 
    public bool facingRight = true;   // For determining which way the player is currently facing. 
    [HideInInspector] 
    public bool jump = false;    // Condition for whether the player should jump. 
    public float moveForce = 365f;   // Amount of force added to move the player left and right. 
    public float maxSpeed = 5f;    // The fastest the player can travel in the x axis. 
    public float jumpForce = 1000f;// Amount of force added when the player jumps. 
    public string jumpButton = "Jump_P1"; 
    public string horizontalCtrl = "Horizontal_P1"; 
    public string verticalCtrl = "Vertical_P1"; 


    private Transform groundCheck;   // A position marking where to check if the player is grounded. 
    private bool grounded = false;   // Whether or not the player is grounded. 


    void Awake() 
    { 
     // Setting up references. 
     groundCheck = transform.Find("groundCheck"); 

    } 

    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(jumpButton) && grounded) 
      jump = true; 
    } 

    void FixedUpdate() 
    { 
     // Cache the horizontal input. 
     float h = Input.GetAxis (horizontalCtrl); 
     float a = Input.GetAxis (verticalCtrl); 


     // If the player is changing direction (h has a different sign to velocity.x) or hasn't reached maxSpeed yet... 
     if (h * GetComponent<Rigidbody2D>().velocity.x < maxSpeed) 
      // ... add a force to the player. 
      GetComponent<Rigidbody2D>().AddForce (Vector2.right * h * moveForce); 

     // If the player's horizontal velocity is greater than the maxSpeed... 
     if (Mathf.Abs (GetComponent<Rigidbody2D>().velocity.x) > maxSpeed) 
      // ... set the player's velocity to the maxSpeed in the x axis. 
      GetComponent<Rigidbody2D>().velocity = new Vector2 (Mathf.Sign (GetComponent<Rigidbody2D>().velocity.x) * maxSpeed, GetComponent<Rigidbody2D>().velocity.y); 

     // If the input is moving the player right and the player is facing left... 
     if (h > 0 && !facingRight) 
      // ... flip the player. 
      Flip(); 
     // Otherwise if the input is moving the player left and the player is facing right... 
     else if (h < 0 && facingRight) 
      // ... flip the player. 
      Flip(); 

     // If the player should jump... 
     if (jump) { 

      // Add a vertical force to the player. 
      GetComponent<Rigidbody2D>().AddForce (new Vector2 (0f, jumpForce)); 

      // Make sure the player can't jump again until the jump conditions from Update are satisfied. 
      jump = false; 
     } 
    } 

    void Flip() 
    { 
     // Switch the way the player is labelled as facing. 
     facingRight = !facingRight; 

     // Multiply the player's x local scale by -1. 
     Vector3 theScale = transform.localScale; 
     theScale.x *= -1; 
     transform.localScale = theScale; 
    } 
} 
+0

將剛體添加到您的球員 –

+0

我的球員有一個剛體;當我跳躍時,他只是漂浮下來。 –

回答

1

增加重力播放機的RigidBody2D同時也增加了jumpForce變量讓他跳不夠高。隨着重力和跳躍力的增加,他可以跳得儘可能高,然後重力將他迅速送回地面。