[DB]Les Images dans le canvas.

Questions à propos du GUI, y compris la partie script.
zebilamouche
Messages : 38
Inscription : 17 Juin 2016 20:34

[DB]Les Images dans le canvas.

Message par zebilamouche » 03 Juil 2016 21:56

Salut à tous,

je cherche depuis quelques à jour à développer un menu de sélection de personnages.
J'ai pour le moment réussi à coder la phase de pré-sélection des personnages avec leur attribution à un joueur.
Mais rencontre des soucis lors de l'instance des images dans le menu.

J'aimerai que lorsque j'utilise " Instantiate(nomdelimage, transform.position, transform.rotation ); " l'image soit directement instancié dans mon canvas et (si possible) encore mieux : dans mon panel.

Pour mieux comprendre :
Lorsque je clique sur un personnage(image) ( dans le panel "sélection des personnages" ) je voudrai que celui-ci soit cloné dans le panel (personnages sélectionnés). Or pour l'instant l'image est cloné direct dans la hiérarchie sans objets parents (et donc ne s'affiche pas)Vous me suivez ?

Voici le code que j'utilise :

Code : Tout sélectionner

public GameObject hero1j1;
void Start()
    {
        hero1j1.GetComponent<Image>();
    }
 public void InstanceHero1j1()
    {
        Debug.Log("Hero 1 est joueur 1(1j1)");
        Instantiate(hero1j1, transform.position, transform.rotation );
    }


J'utilise 2 scripts pour l'instant, dans le premier sont présentes toutes mes variables, le second est lié directement au canvas et traite en partie les boutons (cliquer sur un perso).

Les scripts complets :
Le premier

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class guicontrol : MonoBehaviour
{
    public bool hero1;
    public bool hero2;
    public bool joueur1;
    public bool joueur2;
    public bool joueur1s;
    public bool joueur2s;

    public GameObject hero1j1;



    void Start()
    {
        joueur1s = false;
        joueur2s = false;
        hero1 = false;
        hero2 = false;
        hero1j1.GetComponent<Image>();
    }

    public void InstanceHero1()
    {
        Debug.Log("Hero 1 selectionné");
    }
    public void InstanceHero1j1()
    {
        Debug.Log("Entant que joueur 1(1j1)");
        Instantiate(hero1j1, transform.position, transform.rotation );
    }
    public void InstanceHero1j2()
    {
        Debug.Log("Entant que joueur 2(1j2)");
    }
    public void InstanceHero2()
    {
        Debug.Log("Hero 2 selectionné");
    }
    public void InstanceHero2j1()
    {
        Debug.Log("Entant que joueur 1(2j1)");
    }
    public void InstanceHero2j2()
    {
        Debug.Log("Entant que joueur 2(2j2)");

    }
    


}
Le second (lié au canvas)

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class guicontrole : guicontrol // Herite de guicontrol
{
    // Phase de Selection des personnages
    public void Hero1Selection()
    {
        if (joueur1s == false) // Première selection, donc on lui assigne joueur 1 par défaut.
        {
            hero1 = true; // Hero 1 est validé
            joueur1s = true; // Joueur 1 selectionné
            InstanceHero1(); // Fonction D'instance du hero IG
            InstanceHero1j1();// Fonction d'instance du hero entant que j1
            return;
        }
        if (joueur2s == false && joueur1s == true) // Utilisé si le joueur 1 a déjà été assigné et que le joueur 2 est dispo
        {
            hero1 = true;
            joueur2s = true; // Le joueur 2 est donc selectionné
            InstanceHero1();
            InstanceHero1j2();
            return;
        }

        if (joueur2s == true && joueur1s == true) // Si le nombre de selection de joueur est atteind
        {
            Debug.Log("nbre hero max atteind");

        }
    }


    public void Hero2Selection()
    {
        if (joueur1s == false)
        {
            hero2 = true;
            joueur1s = true;
            InstanceHero2();
            InstanceHero2j1();
            return;
        }
        if (joueur2s == false && joueur1s == true)
        {
            hero2 = true;
            joueur2s = true;
            InstanceHero2();
            InstanceHero2j2();
            return;
        }

        if (joueur2s == true && joueur1s == true)
        {
            Debug.Log("nbre hero max atteind");

        }

    }
}
N'hésitez pas à me donner des conseils sur la façon dont est rédigé mon code, je débute et j'ai forcément fait deux-trois bêtises.
En vous remerciant

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [DB]Les Images dans le canvas.

Message par Iwa » 05 Juil 2016 09:55

Salut à toi,

Tu as presque ta solution. Pour que ton objet s'instantie au bon endroit il te suffit d'ajouter une ligne pour le reparenter là où tu souhaites c'est à dire dans le panel qui t'intéresse.

Code : Tout sélectionner

public GameObject hero1j1;
public Transform panelBidule;
void Start()
    {
        hero1j1.GetComponent<Image>();
    }
 public void InstanceHero1j1()
    {
        Debug.Log("Hero 1 est joueur 1(1j1)");
        Instantiate(hero1j1, transform.position, transform.rotation );
        //Reparenter l'objet au panelBidule;
    }
Pour reparenter tu as dans le composant transform de l'objet une fonction SetParent(); que je t'invites à décortiquer ici : https://docs.unity3d.com/ScriptReferenc ... arent.html où sur le forum en recherchant ;)

Bon courage
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Répondre

Revenir vers « L'interface GUI »