球员不能双跳

时间:2016-01-29 13:30:09

标签: c# unity3d

我正在关注YouTube上的教程,到目前为止一切正常,除了我只能使用此代码进行一次跳转,任何建议?

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Player : MonoBehaviour {
    public float power = 500; 
    public int jumpHeight = 1000; 
    public bool isFalling = false; 
    public int Score;
    public Text SCORE; 
    public GameObject YOUDIED; 
    private int health = 3;
    public GameObject health1; 
    public GameObject health2; 
    public GameObject health3;
    public int Highscore;
    private bool canDoubleJump; 
    private bool jumpOne; 
    private bool jumpTwo;

    // Use this for initialization
    void Start () { 
        YOUDIED.SetActive(false);
        Highscore = PlayerPrefs.GetInt ("Highscore", 0);     
        jumpOne = false;   
        jumpTwo = false;    
        canDoubleJump = false;
    }

    void Update() {     
        if(Input.GetMouseButtonDown(0) && health == 0) {
            Time.timeScale = 1f;
            health = 3;
            Application.LoadLevel(0);
        }

        if (health == 3) {
            health1.SetActive (true);
            health2.SetActive (true);
            health3.SetActive (true);
        }

        if (health == 2) {
            health1.SetActive (true);
            health2.SetActive (true);
            health3.SetActive (false);
        }

        if (health == 1) {
            health1.SetActive (true);
            health2.SetActive (false);
            health3.SetActive (false);
        }

        if (health == 0) {
            health1.SetActive (false);
            health2.SetActive (false);
            health3.SetActive (false);
        }

        if (health <= 0) {
            YOUDIED.SetActive (true);
            Time.timeScale = 0.0f;
        }

        SCORE.text = "Score " + Score;

        transform.Translate(Vector2.right * power * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.Space) && isFalling == false) {
            jumpOne = true;
            canDoubleJump = true;
            isFalling = true;
        }

        if (Input.GetKeyDown(KeyCode.Space) && isFalling == true && canDoubleJump == true) {
            jumpTwo = true;
            canDoubleJump = false;
        }

     }

    void FixedUpdate() {
        if (jumpOne == true) {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
            jumpOne = false;
        }

        if (jumpTwo == true) {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
            jumpTwo = false;
        }
    }

    void OnCollisionStay2D(Collision2D coll) {
        if (coll.gameObject.tag == "Ground") {
            isFalling = false;
            canDoubleJump = false;
    }

 }

    public void ScorePlus(int NewScore) {
        Score += NewScore;    

        if(Score >= Highscore) {
            Highscore = Score;
            PlayerPrefs.SetInt ("Highscore", Highscore);
        }
    }

    void OnTriggerEnter2D(Collider2D coll) {
        if (coll.gameObject.tag == "Death") {
            health -= 1;
        }
    }   
}

2 个答案:

答案 0 :(得分:0)

canDoubleJump应该设置为true

void OnCollisionStay2D(Collision2D coll) {
    if (coll.gameObject.tag == "Ground") {
        isFalling = false;
        canDoubleJump = false;
}

同样在第一次跳转中你需要将isFalling设置为true

    if (jumpOne == true) {
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
        jumpOne = false;
        isFalling = true;
    }

应该做的伎俩

答案 1 :(得分:0)

解决, 我放了一个else if语句而不只是if

    if (Input.GetKeyDown(KeyCode.Space) && isFalling == false) {
        jumpOne = true;
        canDoubleJump = true;
        isFalling = true;
    }else if (Input.GetKeyDown(KeyCode.Space) && isFalling == true && canDoubleJump == true) {
        jumpTwo = true;
        canDoubleJump = false;
   }