示例#1
0
 void OnTriggerExit2D(Collider2D coll)
 {
     EndGame = FindObjectOfType <Finish>();
     if (coll.tag == "Player") // Nous recuperons le tag de l'objet en colision
     {
         Out = true;
         EndGame.MakeDead();
     }
     else
     {
         Destroy(coll.transform.root.gameObject);
     }
 }
    // Update is called once per frame
    void Update()
    {
        nlife = GetComponent <PlayerInventory>().life;
        if (nlife > 0)
        {
            //SHOOT**************************************************************
            bool shoot = Input.GetButtonDown("Fire1");
            //shoot |= Input.GetButtonDown("Fire2");
            // Astuce pour ceux sous Mac car Ctrl + flèches est utilisé par le système
            if (shoot)
            {
                WeaponScript weapon = GetComponent <WeaponScript>();
                if (weapon != null)
                {
                    // false : le joueur n'est pas un ennemi
                    weapon.Attack(false);
                }
            }
            //*******************************************************************
            //JUMPS**************************************************************

            grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
            if (grounded == true)
            {
                countJumps = true;
            }
            if (grounded && (Input.GetKeyDown(KeyCode.UpArrow)))
            {                                                                      // On verifie si l'utilisateur est au sol, et si l'input jump est en appui
                playerAnim.SetBool("IsGrounded", false);                           // On defini le parametre danimation IsGrounded a faux car nous nous aprettons a sauter
                playerRB.velocity = new Vector2(playerRB.velocity.x, 0f);          // On defini la velocite y a 0 pour etre sur d'avoir la même hauteur quelque soit le contexte
                playerRB.AddForce(new Vector2(0, jumpPower), ForceMode2D.Impulse); // On ajoute de la force sur notre rigidbody afin de le faire s'envoler, on precise bien un forcement a impulse pour avoir toute la force d'un seul coup
                grounded   = false;                                                // On defini notre grounded a false pour garder en memoire l'etat du personnage
                countJumps = true;
            }

            if (canDoubleJumps)
            {
                if (countJumps == true && (Input.GetKeyDown(KeyCode.UpArrow)))
                {
                    playerRB.velocity = new Vector2(playerRB.velocity.x, 0f);
                    playerRB.AddForce(new Vector2(0, jumpPower), ForceMode2D.Impulse);
                    countJumps = false;
                }
            }
            //*******************************************************************



            //print(countJumps);
            // on utilise ici notre moteur physique pour crér un petit cercle àn endroit bien precis(position du ground check personnage)
            // On defini aussi son radius pour dessiner le cercle
            // Et on defini le layer sur lequel on veut checker l'overlap
            // Si le cercle overlap avec le ground layer, ç va nous renvoyer vrai, car le player est au sol
            // Sinon cela veut dire que le personnage est en l'air
            // Cela va nous permetre aussi de declencer la condition permettant d'appliquer la force sur notre personnage


            //MOVEMENT*************************************************************
            playerAnim.SetBool("IsGrounded", grounded); // On utilise donc cette information pour mettre a jour note animator
            float move = Input.GetAxis("Horizontal");
            // Rédiger ci dessous le code permettant de déerminer quand le player doit se retourner
            if (canMove == true)
            {
                if (move < 0 && facingRight || move > 0 && !facingRight)
                {
                    Flip();
                }
                playerRB.velocity = new Vector2(move * maxSpeed, playerRB.velocity.y); // On utilise
                playerAnim.SetFloat("MoveSpeed", Mathf.Abs(move));                     // Defini une valeur pour le float MoveSpeed dans notre animator
            }
            else
            {
                playerRB.velocity = new Vector2(0, playerRB.velocity.y); // Si movement non autorise, on arrete la velocite
                playerAnim.SetFloat("MoveSpeed", 0);                     // on arrete aussi l'animation en cours si on etait en train de courir
            }
            //***********************************************************************
            //SLEEP******************************************************************
            targetTime -= Time.deltaTime;
            //print("Temps: " + targetTime);
            if (Input.GetAxis("Horizontal") == 0 && !(Input.GetKeyDown(KeyCode.UpArrow)) && targetTime <= 0)
            {
                playerAnim.SetBool("Sleep", true);
            }
            if (Input.GetAxis("Horizontal") != 0 || (Input.GetKeyDown(KeyCode.UpArrow)))
            {
                playerAnim.SetBool("Sleep", false);
                targetTime = 3;
            }
            //***********************************************************************
            if (facingRight)
            {
                weapons.transform.eulerAngles   = new Vector2(0, 0);
                weapons.transform.localPosition = new Vector2(0.2f, -0.02f);
            }
            else
            {
                weapons.transform.eulerAngles   = new Vector2(0, 180);
                weapons.transform.localPosition = new Vector2(-0.2f, -0.02f);
            }
        }
        else
        {
            EndGame.MakeDead();
        }
    }