2017-06-08 6 views
0

私は2Dプラットフォームを作っています。これまでのところ私のコードです。キャラクターは地面に触れるときにのみジャンプするが、ダブルジャンプのコードは機能しない。どんな助けもありがとうございます。私はスクリプト作成では新しく、私が間違ったことを理解していませんか?私の2Dキャラクターをダブルジャンプしようとしています - それはうまくいかず、なぜか分かりません。

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

[gamedev.se]にお問い合わせください。 –

答えて

1

コードはあまり意味がありません。あなたは一つの方法では、あなたのジャンプを処理し、このような何かそれを処理する必要があります

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

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

あなたは三段跳またはあなたが欲しいしかし、多くのジャンプを行うことができますこの方法です。

1

ジャンプメソッドコードをDoubleJumpメソッドのコードに置き換え、ジャンプを適用する前にIsGroundedのチェックを削除してください。それ以外の場合、あなたのキャラクターは毎回地面にいなければなりません。その後、不要になったDoubleJumpメソッドを削除します。後でDoubleJumpを追加スキルとして使用している場合は、maxJumpsを増やすだけでプレーヤーがスキルを習得できます。最初は1に設定して、毎回地面に当たってください。

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