2016-06-23 8 views
0

スペースバーが押された回数を数えることでプレイヤーがダブルジャンプできるようにするプレーヤー移動スクリプトがあります。早い段階で2つのバージョンを扱っていましたが、現在は無作為に停止しています。なぜそれが無作為に停止したのかわからない。Unity 5.3.5fスペースバーを登録していません

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour 
{ 
    public float jumpPower = 2f; 

    [SerializeField] 
    public bool isGrounded = true; 

    [SerializeField] 
    private LayerMask groundLayer, waterLayer; 

    private int numSpacePress = 0; 
    private Rigidbody2D rb; 

    // Ground Checker Stuff 
    public Transform groundChecker; 
    public float groundCheckRadius = 0.1f; 

    void Start() 
    { 
     rb = GetComponent<Rigidbody2D>(); 
    } 

    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.Space) && isGrounded && numSpacePress < 2) 
     { 
      numSpacePress++; 
      Debug.Log("Num spaces pressed = " + numSpacePress); 
      rb.velocity = new Vector2(rb.velocity.x, jumpPower); 
      if (numSpacePress >= 2) 
      { 
       isGrounded = false; 
      } 
     } 

     Collider2D[] hits = Physics2D.OverlapCircleAll(groundChecker.position, groundCheckRadius); 

     foreach (Collider2D hit in hits) 
     { 
      if (hit.gameObject != gameObject) 
      { 
       Debug.Log("Hit = " + hit.gameObject.name); 
       if (((1 << hit.GetComponent<Collider2D>().gameObject.layer) & groundLayer) != 0) 
       { 
        isGrounded = true; 
        numSpacePress = 0; 
       } 
      } 
     } 
    } 
} 

What's Happening Gif、はっきりGIFに私は二回スペースキーを押していますが、それは一つだけで押されたスペースの数を印刷しています。プレーヤーが地面にある場合、押したスペースの数はリセットされますが、gifはプレイヤーが地面に触れていないことも示します。押したときにスペースバーが登録されないのはなぜですか?

答えて

0

スペースバーを押した直後にヒットが発生し、押されたスペースの数をカウントする変数がリセットされました。

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour 
{ 
    public float jumpPower = 2f; 

    [SerializeField] 
    public bool isGrounded = true; 

    [SerializeField] 
    private LayerMask groundLayer, waterLayer; 

    private int numSpacePress = 0; 
    private Rigidbody2D rb; 

    // Ground Checker Stuff 
    public Transform groundChecker; 
    public float groundCheckRadius = 0.1f; 

    void Start() 
    { 
     rb = GetComponent<Rigidbody2D>(); 
    } 

    void Update() 
    { 
Collider2D[] hits = Physics2D.OverlapCircleAll(groundChecker.position, groundCheckRadius); 

     foreach (Collider2D hit in hits) 
     { 
      if (hit.gameObject != gameObject) 
      { 
       Debug.Log("Hit = " + hit.gameObject.name); 
       if (((1 << hit.GetComponent<Collider2D>().gameObject.layer) & groundLayer) != 0) 
       { 
        isGrounded = true; 
        numSpacePress = 0; 
       } 
      } 
     } 

     if (Input.GetKeyDown(KeyCode.Space) && isGrounded && numSpacePress < 2) 
     { 
      numSpacePress++; 
      Debug.Log("Num spaces pressed = " + numSpacePress); 
      rb.velocity = new Vector2(rb.velocity.x, jumpPower); 
      if (numSpacePress >= 2) 
      { 
       isGrounded = false; 
      } 
     } 
    } 
} 
関連する問題