- Home /
Double jump code
Hello, i'm doing a 3D Unity project in school. At one point we had to script in double jumping. The instructions aren't clear. So, I did it on my own. The text doesn't appear and neither can I double jump. I have another script (collectible) if needed. Any help is appreciated! Here is the code:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement;
public class Joueur : MonoBehaviour { public int PowerUpSaut = 2; public int ScoreMin = 5;
private int _score = 0;
//private bool _surLeSol = true; // Variable obsolète
private GameObject _Powerup;
private bool _PowerupActive = false;
private int _sautCompteur = 0;
void Start()
{
_Powerup = GameObject.Find("PowerUp"); // On recherche l'objet PowerUp
_Powerup.SetActive(false); // On masque par défaut le PowerUp
}
// Update is called once per frame
void Update()
{
if(Input.GetKey(KeyCode.D))
GetComponent<Rigidbody>().AddForce(new Vector3(20, 0, 0));
if(Input.GetKey(KeyCode.A))
GetComponent<Rigidbody>().AddForce(new Vector3(-20, 0, 0));
if(Input.GetKey(KeyCode.W))
GetComponent<Rigidbody>().AddForce(new Vector3(0, 0, 20));
if (Input.GetKey(KeyCode.S))
GetComponent<Rigidbody>().AddForce(new Vector3(0, 0, -20));
int MaxSaut;
if(_PowerupActive) // Si le power-up est activé ou non
{
MaxSaut = PowerUpSaut; // On autorise un nombre de sauts maximum (2 car nous mettons en place un double saut)
}
else
{
MaxSaut = 1; // On met MaxSaut à 1 car le joueur doit pouvoir sauter une fois sans power-up
}
if (Input.GetKeyDown(KeyCode.Space) && _sautCompteur < MaxSaut)
{
GetComponent<Rigidbody>().velocity = GetComponent<Rigidbody>().velocity + new Vector3(0, 4, 0);
_sautCompteur = _sautCompteur + 1;
}
// Si la position de la sphère est inférieure à -10 (en y)
if(transform.position.y < -10)
{
// On redémarre la scène
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
} void OnCollisionStay(Collision collision) { if(collision.contacts[0].normal.y > 0.8) //_surLeSol = true; // Variable obsolète _sautCompteur = 0; // Si on touche un sol presque horizontal, on remet le compteur de sauts à 0, pour pouvoir sauter à nouveau }
void OnCollisionExit(Collision collision)
{
//_surLeSol = false; // Variable obsolète
_sautCompteur = 1; // On s'assure que lorsque l'on quitte le sol, le compteur de sauts est à 1
}
void OnTriggerEnter(Collider other)
{
Collectible collectible = other.GetComponent<Collectible>(); // On récupère le Collectible
if (collectible != null) // On vérifie si on a bien touché un collectible (Si non, le collectible sera null)
{
if(collectible.name == "PowerUp") // On vérifie si le collectible est notre objet PowerUp
{
_PowerupActive = true; // On sauvegarde l'information que le power-up est maintenant activé
Debug.Log("Power-up activé !"); // On ajoute une ligne dans la console de Unity
}
else // Sinon, c'est un collectible "classique", on modifie donc toujours le score du joueur
_score = _score + collectible.Points;
GameObject.Find("Score").GetComponent<Text>().text = "Score : " + _score;
Destroy(other.gameObject); // On détruit le collectible
if(_score >= ScoreMin) // Si le score est maintenant plus grand ou égal au score requis pour faire apparaitre le power-up {
if (_Powerup != null) // Si l'objet power-up existe bien
{
_Powerup.SetActive(true); // On fait apparaitre le power-up
}
}
}
}`
Your answer
Follow this Question
Related Questions
How to double jump 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers