using UnityEngine; using UnityEngine.SceneManagement; public class Droid : MonoBehaviour { private bool jumpKeyWasPressed; private float horizontalInput; private bool isGrounded; private Rigidbody rigidbodyComponent; private int energyDisksCollected = 0; // Nombre de disques énergétiques collectés private float speedMultiplier = 1f; // Multiplicateur de vitesse private float jumpMultiplier = 1f; // Multiplicateur de saut private int life = 1; private int nbFusee = 1; [SerializeField] private GameObject fusee ; private UIManager UIManager; // Start est appelée une fois avant le premier frame void Start() { rigidbodyComponent = GetComponent(); UIManager = FindObjectOfType(); } void Update() { // Détection de l'input pour sauter if (Input.GetKeyDown(KeyCode.Space)) { jumpKeyWasPressed = true; } // Capture de l'input horizontal horizontalInput = Input.GetAxis("Horizontal"); if (nbFusee > 0) { if (Input.GetKeyDown(KeyCode.S)) { nbFusee -= 1; GameObject ball = Instantiate(fusee, transform.position,new Quaternion(90,90,0,0)); ball.GetComponent().velocity = new Vector3(20,ball.GetComponent().velocity.y, 0); } } StartCoroutine(UIManager.UpdateLifeText(life)); StartCoroutine(UIManager.UpdateFuseeText(nbFusee)); if (life <= 0) { StartCoroutine(UIManager.GameOverSequence()); } } private void FixedUpdate() { // Applique une vélocité horizontale ajustée par le multiplicateur de vitesse rigidbodyComponent.velocity = new Vector3(horizontalInput * 2 * speedMultiplier, rigidbodyComponent.velocity.y, 0); // Applique une force verticale ajustée par le multiplicateur de saut if (jumpKeyWasPressed && isGrounded) { rigidbodyComponent.AddForce(Vector3.up * 5 * jumpMultiplier, ForceMode.VelocityChange); jumpKeyWasPressed = false; // Réinitialise l'état de saut } } // Détection des collisions avec d'autres objets pour gérer isGrounded private void OnCollisionStay(Collision collision) { isGrounded = true; } private void OnCollisionExit(Collision collision) { isGrounded = false; } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.layer == 8) { life = life - 2; } } private void OnTriggerEnter(Collider other) { if (other.gameObject.layer == 3) { life += 1; nbFusee += 1; Destroy(other.gameObject); // Détruit le disque énergétique energyDisksCollected++; // Incrémente le compteur // Double la vitesse et la puissance de saut après 5 disques collectés if (energyDisksCollected == 5) { speedMultiplier = 2f; // Double la vitesse jumpMultiplier = 1.5f; // Double la puissance de saut } } // Gestion des obstacles qui retournent la caméra if (other.gameObject.layer == 6) { Transform[] transforms = gameObject.GetComponentsInChildren(); Transform cameraTransform = transforms[1]; // La caméra est le 1er enfant du droïde // Ajoute une rotation supplémentaire de 180° à chaque collision cameraTransform.rotation *= Quaternion.Euler(0, 0, 180); } if (other.tag == "Exit") { SceneManager.LoadScene("Scene2"); } if (other.tag == "Game Over") { StartCoroutine(UIManager.GameOverSequence()); } } }