comment convertir type void ,struct en booléen ?

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

Re: comment convertir type void ,struct en booléen ?

Message par Kaloverian » 15 Jan 2022 16:57

désolé je ne comprends pas
De quel test parle-t-on?

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

Re: comment convertir type void ,struct en booléen ?

Message par Max » 15 Jan 2022 17:03

Code : Tout sélectionner

if(LeaveTrail(first_objet.transform.position, echellePrefab, prefabMat))
il s'agit bien d'un test ? Qui ne sert à rien vu que LeaveTrail retourne toujours "vrai".
Donc la question est: à quoi sert-il ?
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: comment convertir type void ,struct en booléen ?

Message par Kaloverian » 15 Jan 2022 17:11

on teste si la fonction LeaveTrail est appelée !
J'aurai pu aussi tester cet appel comme ceci:

Code : Tout sélectionner

 bool  LeaveTrail(Vector3 point, float scale, Material material)
    {
      GameObject go = GameObject.Instantiate (prefab, transform);
       go.transform.localScale = Vector3.one * scale;
       go.transform.position = point;
       go.transform.rotation=prefab.transform.rotation;
       go.GetComponent<Renderer>().material = material;
       
       Destroy(go, delay);
       return false;
      
    }
avec :

Code : Tout sélectionner

if( ! LeaveTrail(first_objet.transform.position, echellePrefab, prefabMat))
Ah oui !!

Code : Tout sélectionner

 bool  LeaveTrail(Vector3 point, float scale, Material material)
    {
      GameObject go = GameObject.Instantiate (prefab, transform);
       go.transform.localScale = Vector3.one * scale;
       go.transform.position = point;
       go.transform.rotation=prefab.transform.rotation;
       go.GetComponent<Renderer>().material = material;
       
       Destroy(go, delay);
       return true;
      
    }
    
alors

Code : Tout sélectionner

if( LeaveTrail(first_objet.transform.position, echellePrefab, prefabMat))
ne prouve pas que LeaveTrail a été appelée?
A mon avis,si
Dernière édition par Kaloverian le 15 Jan 2022 17:20, édité 1 fois.

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

Re: comment convertir type void ,struct en booléen ?

Message par Max » 15 Jan 2022 17:17

Kaloverian a écrit :
15 Jan 2022 17:11
on teste si la fonction LeaveTrail est appelée !
heu non, tu testes simplement si elle renvoie true ou false, mais elle sera toujours appelée. Pas besoin d'un If pour cela.
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: comment convertir type void ,struct en booléen ?

Message par Kaloverian » 15 Jan 2022 17:21

Comment alors tester si LeaveTrail a été appelée?

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

Re: comment convertir type void ,struct en booléen ?

Message par Max » 15 Jan 2022 17:25

Kaloverian a écrit :
15 Jan 2022 17:21
Comment alors tester si LeaveTrail a été appelée?
Pourquoi souhaites-tu tester si ta fonction est appelée ? Quel est le but ? Cela aidera à comprendre.
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: comment convertir type void ,struct en booléen ?

Message par Kaloverian » 15 Jan 2022 17:42

La fonction LeaveTrail appelée instancie un prefab.
A chaque instanciation ou à chaque appel de la fonction LeaveTrail,je souhaite ajouter ce prefab dans une liste de GameObject.Ce nouvel élément dans la liste est numéroté et donc je peux intervenir précisément sur le prefab crée(il s'en crée des dizaines à la seconde environ)

Effectivement,il vaut mieux placer dans le corps de la fonction(et non dans la condition if) la liste et le nouveau prefab à rajouter dans la liste.
De cette façon, l'appel à lui seul de la fonction LeaveTrail crée un nouveau prefab dans la liste:pas besoin de faire:
si la fonction LeaveTrail est appelée

script résolu:

Code : Tout sélectionner

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


public class trail_renderer_volumetric_with_list : MonoBehaviour
{
    public GameObject first_objet,prefab;
    public Material prefabMat;
    public float echellePrefab,delay;

    List<GameObject> prefabList;

  
    int i=0;
    
  
    
    // Start is called before the first frame update
    void Start()
    {   
        prefabList=new List<GameObject>();
     
    }

    // Update is called once per frame
    void Update()
    {
  
        LeaveTrail(first_objet.transform.position, echellePrefab, prefabMat);   
        
    }
    
   private void LeaveTrail(Vector3 point, float scale, Material material)
    {
     
        GameObject go = GameObject.Instantiate (prefab, transform);
       
      

        go.transform.localScale = Vector3.one * scale;
        go.transform.position = point;
        go.transform.rotation=prefab.transform.rotation;
     
        go.GetComponent<Renderer>().material = material;
     
         Destroy(go, delay);
      
     
         prefabList.Add(prefab);
        prefabList[i] = new GameObject("prefab" + i);
         print("nombre d'éléments de la liste de prefabs :"+prefabList.Count);
         i++;
     
         
   }
}



Verrouillé

Revenir vers « (C#) CSharp »