[RESOLU] pourquoi ce script simple ne fonctionne-t-il pas?

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
Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

[RESOLU] pourquoi ce script simple ne fonctionne-t-il pas?

Message par Kaloverian » 07 Jan 2022 00:03

bonjour,

J'ai un objet obj qui est translaté dans un environnment.
Je souhaite que dès l'objet arrive à la fin de l'environnement,il s'y retrouve au début.
Cela ne fonctionne pas avec ce script basique et je ne comprends pas pourquoi ?

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class end_to_start : MonoBehaviour
{   
    public GameObject environment,obj;

    float debut_environment,fin_environment;

    public float speed;

    Vector3 posObj;
    
    // Start is called before the first frame update
    void Start()
    {
        float debut_environment=-environment.GetComponent<Transform>().localScale.z/2;
         float fin_environment=environment.GetComponent<Transform>().localScale.z/2;
         print("debut environment: "+debut_environment);
         print("fin environment: "+fin_environment);
    }     
      
    // Update is called once per frame
    void Update()
    { 
          
        obj.transform.Translate(0,0,speed*Time.deltaTime,Space.Self);
       Vector3 posObj=obj.GetComponent<Transform>().position;
        

        if(posObj.z==fin_environment)
        {
            obj.transform.position=new Vector3(posObj.x,posObj.y,debut_environment);
        }
      
    }
}

merci de votre aide

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: pourquoi ce script simple ne fonctionne-t-il pas?

Message par Max » 07 Jan 2022 09:00

Bonjour,

tu déclares et initialises tes variables debut_environment et fin_environment de façon locale dans Start.
Mais la portée de ces déclarations reste limitée à la méthode Start.
Ce qui veut dire que par exemple dans ton Update, debut_environment et fin_environment sont toujours à zéro.

Le concept de variable locale/globale est un concept de base dans le manipulations des données au sein du code.

En suite, accessoirement, on évite les tests d’égalité sur des floats.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: pourquoi ce script simple ne fonctionne-t-il pas?

Message par Kaloverian » 07 Jan 2022 16:23

Ceci ne fonctionne toujours pas.Pourquoi?

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class end_to_start : MonoBehaviour
{   
    public GameObject environment,obj;

    float debut_environment,fin_environment;

    

    public float speed;

    Vector3 posObj;
    
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {   debut_environment=-environment.GetComponent<Transform>().localScale.z/2;
         fin_environment=environment.GetComponent<Transform>().localScale.z/2;
          
        obj.transform.Translate(0,0,speed*Time.deltaTime,Space.Self);
        Vector3 posObj=obj.GetComponent<Transform>().position;
      

        if(posObj.z==fin_environment)
        {
            obj.transform.position=new Vector3(posObj.x,posObj.y,debut_environment);
            
        }
      
    }
}

[/code

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: pourquoi ce script simple ne fonctionne-t-il pas?

Message par Max » 07 Jan 2022 17:45

Tu ne semble pas voir lu la remarque faite dans mon précédent message.
On évite au maximum les tests d'égalité sur les float. Dans ton cas il vaut mieux écrire if (posObj.z > fin_environment).
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: [RESOLU] pourquoi ce script simple ne fonctionne-t-il pas?

Message par Kaloverian » 07 Jan 2022 17:51

ok merci!
résolu

Répondre

Revenir vers « (C#) CSharp »