[résolu] Problème de position des prefabs instancié dans un Scroll View

Questions à propos du GUI, y compris la partie script.
Avatar de l’utilisateur
Murdeau
Messages : 21
Inscription : 30 Juil 2020 14:03
Localisation : Grenoble

[résolu] Problème de position des prefabs instancié dans un Scroll View

Message par Murdeau » 25 Août 2022 22:59

Bonjour,
J’ai créé un menu déroulant dans mon canvas : UI>Scroll View
J’ai créé des Button (Button0, Button1, Button2, …) dans Content puis je les ai transformé en prefab avant de les effacer de Content.
J’ai ajouté un script à Scroll View qui instancie tous les prefabs Button dans Content.
Voici le script :

Code : Tout sélectionner

public class affichageLecons : MonoBehaviour
{
    public GameObject[] lecons;         // tableau contenant toutes les préfabs leçons qui ont été glisser dans Inspector
    public GameObject gameobjectParent; // faire glisser "content" dans Inspector
    private choixAccueil scriptChoixAcc;      // pour se connecter au script "choixAccueil"

    void Start()
    {
        scriptChoixAcc = GameObject.Find("GameController").GetComponent<choixAccueil>();    // prendre le script "choixAccueil" du GameObject "GameController"
        instancierEnfants();     // instantier les leçons en temps que enfant du GameObject "content" 
    }

     // instancier dans canvas comme enfant de "content"  
    void instancierEnfants()
    {
        for (int i = 0; i < scriptChoixAcc.inventaire.nbLecons; i++)
        {                                                                               
            GameObject mChild = Instantiate(lecons[i],
                                            lecons[i].gameObject.transform.position,
                                            lecons[i].gameObject.transform.rotation);   // afficher le ButtonLecon 
            mChild.transform.SetParent(gameobjectParent.transform);      // mChild devient enfant de Content
            mChild.transform.localScale = new Vector3(1,1,1);                        // imposer une taille de 1
            Debug.Log(mChild.transform.position.z);                                     // Ecrire la valeur de Pos z
        }
    }
}
Et quand je mets en marche mon jeu, les prefabs ne sont pas instanciés au bon endroit, c’est leur Pos z qui est égale à -350 au lieu de 0.
Quand je fais un Debug.Log(prefab.transform.position.z), j’obtiens 0 alors que dans inspector et à l’écran, les prefabs sont à -350.
Quand je change manuellement la valeur de Pos z et que je la mets à 0, les prefabs sont à leur place.
Comment faire pour que mes prefabs s’affichent au bon endroit ?
Merci pour votre aide. Murdeau.
Dernière édition par Murdeau le 28 Août 2022 23:46, édité 1 fois.

Avatar de l’utilisateur
Murdeau
Messages : 21
Inscription : 30 Juil 2020 14:03
Localisation : Grenoble

Re: Problème de position des prefabs instancié dans un Scroll View

Message par Murdeau » 28 Août 2022 23:45

Bonjour,
Je viens de trouver la solution à mon problème.
J'ai imposé une position précise au préfab dans le gameobject parent :
mChild.transform.localPosition = new Vector3(290, -50, 0);

Code : Tout sélectionner

public class affichageLecons : MonoBehaviour
{
    public GameObject[] lecons;         // tableau contenant toutes les préfabs leçons qui ont été glisser dans Inspector
    public GameObject gameobjectParent; // faire glisser "content" dans Inspector
    private choixAccueil scriptChoixAcc;      // pour se connecter au script "choixAccueil"

    void Start()
    {
        scriptChoixAcc = GameObject.Find("GameController").GetComponent<choixAccueil>();    // prendre le script "choixAccueil" du GameObject "GameController"
        instancierEnfants();     // instantier les leçons en temps que enfant du GameObject "content" 
    }

     // instancier dans canvas comme enfant de "content"  
    void instancierEnfants()
    {
        for (int i = 0; i < scriptChoixAcc.inventaire.nbLecons; i++)
        {                                                                               
            GameObject mChild = Instantiate(lecons[i],
                                            lecons[i].gameObject.transform.position,
                                            lecons[i].gameObject.transform.rotation);   // afficher le ButtonLecon 
            mChild.transform.SetParent(gameobjectParent.transform);      // mChild devient enfant de Content
            mChild.transform.localScale = new Vector3(1,1,1);                        // imposer une taille de 1
            mChild.transform.localPosition = new Vector3(290, -50, 0);       // imposer une position précise dans le gameobject parent
            Debug.Log(mChild.transform.position.z);                                     // Ecrire la valeur de Pos z
        }
    }
}
Je considère donc mon problème résolu.

Répondre

Revenir vers « L'interface GUI »