Probléme avec Mathf.Lerp

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
mikart
Messages : 20
Inscription : 20 Mai 2014 23:36

Probléme avec Mathf.Lerp

Message par mikart » 17 Nov 2020 20:27

Bonjour,

voila j'ai un petit problème, je ne trouve pas mon erreur.
Merci D'avance pour votre aide.

explication :

j'utilise :

Code : Tout sélectionner

Mathf.Lerp
pour changer le fieldOfView de la camera.
Mon problème est que si j'utilise la valeur 0.2f sur la variable

Code : Tout sélectionner

Zspeed
je n'attient pas la valeur Max

voici le code :

Code : Tout sélectionner

 public GameObject target;
   


    [SerializeField] float Min, Max, smoothSpeed, Zspeed;

    private void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player");    
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float vertAxe = Input.GetAxis("Vertical");

        Camera.main.fieldOfView = Mathf.Lerp(Min, Max, vertAxe * Zspeed) ;
        
        Vector3 position = new Vector3(target.transform.position.x, target.transform.position.y, transform.position.z);
        transform.position = Vector3.Lerp(transform.position, position, smoothSpeed );

    }
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5504
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Probléme avec Mathf.Lerp

Message par boubouk50 » 17 Nov 2020 21:59

Code : Tout sélectionner

Camera.main.fieldOfView = Mathf.Lerp(Min, Max, vertAxe * Zspeed) ;
Si tu fais ça, ton interpolant ira de -Zspeed à +Zspeed alors qu'il doit aller de 0 à 1 pour aller de Min (0) à Max (1). Tu ne peux donc pas faire ça. Ici tu ne contrôles aucune vitesse, tu contrôles seulement la valeur de sortie.
Pour avoir une vitesse d'interpolation, il te faut faire une addition dépendante du FixedDeltaTime, du vertAxe et du Zspeed.

Code : Tout sélectionner

 public GameObject target;
       [SerializeField] float Min, Max, smoothSpeed, Zspeed;
       private float interpolant = 0f; //admettons qu'il comment au Min

    private void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player");    
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        interpolant  += Input.GetAxis("Vertical")*Zspeed*Time.fixedDeltaTime; //Ici tu incrémentes ou décrémentes ton interpolant en fonction de ton Input, du temps passé et de la vitesse définie
        interpolant = Mathf.Clamp01 (interpolant); //Ici tu bornes ton interpolant entre 0 et 1

        Camera.main.fieldOfView = Mathf.Lerp(Min, Max, interpolant ); //Ton interpolant varie en fonction du temps, donc ton interpolation aussi
        
        Vector3 position = new Vector3(target.transform.position.x, target.transform.position.y, transform.position.z);
        
        transform.position = Vector3.Lerp(transform.position, position, smoothSpeed ); //Attention ici smoothSpeed étant fixe mais pas transform.position, tu vas te rapprocher petit à petit de la position finale sans jamais l'atteindre, c'est une utilisation détournée qui donne l'impression d'avoir un Lerp oéprationnel mais tu ne contrôles rien du tout.
    }
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

mikart
Messages : 20
Inscription : 20 Mai 2014 23:36

Re: Probléme avec Mathf.Lerp

Message par mikart » 21 Nov 2020 23:52

Bonsoir boubouk50,

Merci pour la réponse, j'ai bien compris se qui ne va pas. Je vais modifier cela Merci encore

Répondre

Revenir vers « (C#) CSharp »