Page 1 sur 1

[RESOLU] [MY - AL] Problème de récupération de valeurs dans un Prefab

Publié : 05 Sep 2021 10:57
par ludo2vie
Bonjour à tous.

J'explique mon souci ...

J'ai une scène, avec un script qui me donne des valeurs jour ou nuit.
Dans cette scene, je fais apparaitre de façon aléatoire des véhicules. Ces derniers sont des prefab.
Mon problème, est que je ne sais pas comment donner l'info au préfab de la valeur lié à ma scène.
Pour être plus précis, dans mon prefab, j'ai créé un script, qui suivant la valeur jour ou nuit de la scène, allume les phares.
Quand je suis sur le prefab, je n'ai pas le moyen d'attribuer le script "jour / nuit" présent dans la scène.

J'espère avoir expliqué correctement le souci.
Merci de vos retours ;)

Re: [MY - AL] Problème de récupération de valeurs dans un Prefab

Publié : 05 Sep 2021 12:42
par ludo2vie
Hello,
Pour info, j'ai réussi par le biais du Tag.
J'ai attribué un Tag "TimeDayNight" au gameobject de ma scène, et j'ai pu attribué la valeur "hour" (celle qui m'intéresse pour passer de jour à nuit) dans mon Prefab.
Je mets le script humblement, il peut servir à un débutant comme moi ;)

Code : Tout sélectionner

public class PhareRecupTime : MonoBehaviour
{
    public GameObject phare;
    GameObject daynightcycl;

    public int fixhour;


    void Start()
    {

        daynightcycl = GameObject.FindWithTag("TimeDayNight");
        fixhour = daynightcycl.GetComponent<DayNightCycle>().hour;

    }

    // Update is called once per frame
    void Update()
    {
        fixhour = daynightcycl.GetComponent<DayNightCycle>().hour;


        //
        if (fixhour < 7)
        {
            phare.SetActive(true);
        }
        if (fixhour > 17)
        {
            phare.SetActive(true);
        }
        if (fixhour >= 7 && fixhour <= 17)
        {
            phare.SetActive(false);
        }
        //

    }
}

Re: [MY - AL] Problème de récupération de valeurs dans un Prefab

Publié : 05 Sep 2021 14:28
par Max
Bonjour,

merci pur cette auto-réponse :mrgreen:

par contre, par rapport à ton script, évite les GetComponent() dans l'Update, c'est assez lourd comme fonction, et même si sur une application simple tu ne t'en rends pas compte, cela pompe des ressources qui ne se justifie pas.
Placer le component DayNightCycle en cache est une solution plus appropriée. Par exemple, tu peux écrire quelque chose comme:

Code : Tout sélectionner

public class PhareRecupTime : MonoBehaviour
{
...
    private DayNightCycle cycle;
...
    void Start()
    {
    ...
      cycle = daynightcycl.GetComponent<DayNightCycle>();
    ...
    }
    
    // Update is called once per frame
    void Update()
    {
        fixhour = cycle.hour;    
      ...
      }