2017-06-08 4 views
0

Je fais un platformer 2D. Voici mon code jusqu'à présent. Le personnage ne saute que lorsqu'il touche le sol comme il se doit - mais le code pour le double saut ne fonctionne pas. Toute aide est appréciée. Je suis nouveau au script et je ne comprends pas ce que j'ai fait de mal?Essayer de faire sauter mon personnage en 2D - ça ne marche pas et je ne sais pas pourquoi?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class PlayerController : MonoBehaviour { 

    public float speed = 12f, jumpHeight = 30f; 
    Rigidbody2D playerBody; 
    Transform playerTrans, tagGround; 
    bool isGrounded = false; 
    public LayerMask playerMask; 
    public float maxJumps = 2; 
    public float jumpsLeft = 2; 



    // Use this for initialization 
    void Start() 
    { 
     playerBody = this.GetComponent<Rigidbody2D>(); 
     playerTrans = this.transform; 
     tagGround = GameObject.Find(this.name + "/tag_Ground").transform; 

    } 

    // Update is called once per frame 
    public void FixedUpdate() 
    { 
     isGrounded = Physics2D.Linecast(playerTrans.position, tagGround.position, playerMask); 
     Move(); 
     Jump(); 
     DoubleJump(); 

    } 

    private void Move() 
    { 
     float move = Input.GetAxisRaw("Horizontal") * speed; 
     playerBody.velocity = new Vector2(move, playerBody.velocity.y); 
    } 

    private void Jump() 

    { 
     if (isGrounded) 
     { 


      if (Input.GetButtonDown("Jump")) 
      { 
       playerBody.velocity = new Vector2(playerBody.velocity.x, jumpHeight); 


      } 


     } 

    } 
    private void DoubleJump() 
    { 
     if (Input.GetButtonDown("Jump") && jumpsLeft > 0) 
     { 
      Jump(); 
      jumpsLeft--; 
     } 

     if (isGrounded) 
     { 
      jumpsLeft = maxJumps; 
     } 
    } 
} 
+0

Essayez de demander à [gamedev.se] –

Répondre

1

Votre code n'a pas beaucoup de sens. Vous devez gérer votre saut dans une méthode et gérer quelque chose comme ceci:

private void HandleJump() 
{ 
    if(isGrounded) { 
     jumpsLeft = maxJumps; 
    } 

    if(Input.GetButtonDown("Jump") && jumpsLeft > 0) { 
     playerBody.velocity = new Vector2(playerBody.velocity.x, jumpHeight); 
     jumpsLeft--; 
    } 
} 

De cette façon, vous pouvez faire des sauts triples ou cependant de sauts que vous voulez.

1

Essayez de remplacer votre code de la méthode de saut avec le code de la méthode DoubleJump et retirer le chèque de IsGrounded avant d'appliquer le saut. Sinon, votre personnage doit être au sol à chaque fois. Ensuite, supprimez la méthode DoubleJump car elle n'est plus nécessaire. Si vous utilisez le DoubleJump comme une compétence supplémentaire plus tard dans votre jeu, augmentez simplement maxJumps lorsque votre joueur gagne la compétence. Réglez-le à 1 au départ pour qu'ils doivent frapper le sol à chaque fois.

 private void Jump() { 
     if (isGrounded) { 
      jumpsLeft = maxJumps; 
     } 
     if (Input.GetButtonDown("Jump") && jumpsLeft > 0) { 
      playerBody.velocity = new Vector2(playerBody.velocity.x, jumpHeight); 
      jumpsLeft--; 
     } 
    }