Page 1 sur 1

Probléme avec Mathf.Lerp

Publié : 17 Nov 2020 20:27
par mikart
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 );

    }
}

Re: Probléme avec Mathf.Lerp

Publié : 17 Nov 2020 21:59
par boubouk50

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.
    }
}

Re: Probléme avec Mathf.Lerp

Publié : 21 Nov 2020 23:52
par mikart
Bonsoir boubouk50,

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