void Update()
    {
        isGrounded = false;

        //Si il y a du sol dans le groudCheck, ie sous le joueur
        Collider[] colliders = Physics.OverlapSphere(groundCheck.position, groundRadius);
        foreach (Collider col in colliders)
        {
            if (col.gameObject.layer == 8)
            {
                isGrounded = true;
            }
        }

        //Mouvement
        speed.x = Input.GetAxis("Horizontal") * maxSpeed;

        //Saut
        if (isGrounded)
        {
            if (Input.GetKeyDown("up"))
            {
                speed.y = jumpSpeed;
                anim.SetTrigger("jump");
            }
            if (speed.y < 0)
            {
                speed.y = 0;
            }
        }

        //Gravité
        if (!isGrounded)
        {
            speed.y -= gravity * Time.deltaTime;
        }

        //Si vitesse non nulle, orienter le joueur dans la direction de la vitesse projetée sur le plan horizontal, et dans la direction opposée si il recule en regardant devant lui
        if (Vector3.ProjectOnPlane(speed, Vector3.up).magnitude > 0.1f)
        {
            int flip;
            if (aiming.looksAtTarget)
            {
                flip = (Vector3.Dot(speed, aiming.AimDir()) >= 0) ? 1 : -1;
            }
            else
            {
                flip = 1;
            }
            transform.rotation = Quaternion.LookRotation(Vector3.ProjectOnPlane(flip * speed, Vector3.up));
        }


        //Update Animation
        controller.Move(speed * Time.deltaTime);
        anim.SetFloat("speed", Vector3.ProjectOnPlane(speed, Vector3.up).magnitude);
        anim.SetBool("runsBackward", !(Vector3.Dot(speed, aiming.AimDir()) >= 0));
        anim.SetBool("grounded", isGrounded);


        //Position du BulletStart
        shootingPivot.transform.rotation = Quaternion.LookRotation(aiming.TrueAimDir());
        Debug.DrawRay(shootingPivot.transform.position, aiming.TrueAimDir());

        //Feu
        if (weaponSwitch.equippedWeapon != null && Time.time >= nextTimeToFire)
        {
            if ((weaponSwitch.equippedWeaponGunScr.automatic && Input.GetButton("Fire1")) || Input.GetButtonDown("Fire1"))
            {
                weaponSwitch.equippedWeaponGunScr.Shoot(bulletStart.transform.position, aiming.aimPos);
                anim.SetTrigger("shoots");
                nextTimeToFire     = Time.time + 1 / weaponSwitch.equippedWeaponGunScr.fireRate;
                nextTimeToLowerGun = Time.time + aimingTime;
            }
        }

        if (Time.time >= nextTimeToLowerGun)
        {
            //Ajouter une animation de position de combat universelle
        }
        else
        {
        }

        //WeaponSwitch
        if (Input.GetButtonDown("Fire2"))
        {
            for (int i = 1; i <= layerAmount; i++)
            {
                anim.SetLayerWeight(i, 0);
            }
            if (weaponSwitch.equippedWeapon == null)
            {
                aiming.looksAtTarget = true;
                if (weaponSwitch.PickUpWeapon())
                {
                    anim.SetLayerWeight(weaponSwitch.equippedWeaponGunScr.holdingPose, 100);
                }
            }
            else
            {
                weaponSwitch.DropWeapon();
                aiming.looksAtTarget = false;
            }
        }

        if (!isGrounded && wasGroundedLastFrame)
        {
            anim.SetTrigger("falls");                                             //if start falling
        }
        wasGroundedLastFrame = isGrounded;
    }