Double jumping not working - can't find the culprit
Hello
I'm new to scripting and thus follow a tutorial. My double jumping isn't working, though, and I went through the code in the tutorial again, but couldn't find the culprit. I tried adding a public Rigidbody2D to reference and then set it's velocity on the Y axis to 0, but alas. Here's my entire player script, sorry if it looks a bit weird and confusing, I took the irrelevant parts out:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;
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 ("Længste karriere: ", 0);
jumpOne = false;
jumpTwo = false;
canDoubleJump = false;
}
void Update()
{
if (Input.GetKey (KeyCode.Space) && health == 0)
{
Time.timeScale = 1f;
health = 3;
SceneManager.LoadScene (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 = "Dage " + 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;
}
}
// Update is called once per frame
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("Længste karriere: ", Highscore);
}
}
void OnTriggerEnter2D (Collider2D coll)
{
if (coll.gameObject.tag == "Death")
{
health -= 1;
}
}
}
There are some problems with the pasted code. For instance...
The Update() method looks empty (between lines 35 and 37)
There is a lone "x" on line 38
The class doesn't have a closing brace
I assume the above is related to cut/paste issues and not your actual code. Please fix that. And, whe you paste the new code, select it all and press the "101010" button in the toolbar to format it properly for the forum.
I moved your newly pasted code into the original question (by editing the question) because you pasted the new code as an answer.
Answer by $$anonymous$$ · Apr 29, 2016 at 07:50 PM
Do not use Input.GetKeyDown (KeyCode.Space) two times within the Update to see if the button is pressed two times. When someone holds the key down both will be activated
check if the key is pressed with Input.GetKeyDown (KeyCode.Space)
check if the key is release with input.GetKeyUp(KeyCode.Space) to get ready for the next jump.
check the time between release and the next press to see if double jump is allowed.