Inventaire UI Vie Objets

Questions à propos du GUI, y compris la partie script.
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Inventaire UI Vie Objets

Message par boubouk50 » 30 Jan 2017 10:51

Juste une petite astuce concernant les conditions pour l'affectation de booléen:

Code : Tout sélectionner

 if (weapon.model.name == "StaffWhite")// if WeaponModel == StaffWhite 
{
     StaffWhiteIsEquip = true;
}
else if (weapon.model.name != "StaffWhite")// if WeaponModel == StaffWhite 
{
      StaffWhiteIsEquip = false;
}
En l'analysant tu peux vite rendre compte de la redondance des infos:
Si ma condition est vraie alors res=vrai sinon si elle est fausse alors res=fausse.
Si une condition est vraie alors l'opposé est forcément fausse, donc pas besoin de refaire une seconde condition, ce qui donne:
Si ma condition est vraie alors res=vrai sinon res=faux. On vient d'éliminer un if
Ensuite tu remarqueras que le résultat cherché est lui même le résultat de la condition, tu peux donc affecter directement le résultat:
res=ma condition On vient de supprimer totalement la condition pour une affectation.

Code : Tout sélectionner

StaffWhiteIsEquip = (weapon.model.name == "StaffWhite");
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

emma43210
Messages : 23
Inscription : 28 Jan 2017 11:36

Re: Inventaire UI Vie Objets

Message par emma43210 » 30 Jan 2017 10:59

D'accord merci pour l'info mais ça ja l'ai enlevé c'était simplement un test ^^

Apres c'est lorsque la vie de mon objet = 0 je ne sais pas comment supprimer l'image de mon inventaire...

emma43210
Messages : 23
Inscription : 28 Jan 2017 11:36

Re: Inventaire UI Vie Objets

Message par emma43210 » 31 Jan 2017 12:04

Help please :oops:

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Inventaire UI Vie Objets

Message par boubouk50 » 31 Jan 2017 12:39

Essaie peut-être de diviser l'aide que l'on doit t'apporter. Lire, comprendre, tester un script complet prend du temps. Si tu y vas pas à pas, tu trouveras surement un peu plus d'aide.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

emma43210
Messages : 23
Inscription : 28 Jan 2017 11:36

Re: Inventaire UI Vie Objets

Message par emma43210 » 31 Jan 2017 13:45

Oui c'est ce que je fais ^^ mais on sais jamais si quelqu'un s'y connais bien :p

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Inventaire UI Vie Objets

Message par boubouk50 » 31 Jan 2017 13:58

emma43210 a écrit :Est ce que parmis vous il y a quelqu'un qui arriverais à comprendre ce script ? :p

Code : Tout sélectionner


using UnityEngine;
using UnityEngine.UI;

public class InventoryScreen : Form
{
    public ItemSlot[] slots;
    public ItemSlot weaponSlot;
    public ItemSlot armorSlot;
    public ItemSlot helmetSlot;
    public ItemSlot amuletSlot;
    public ItemSlot ringSlot;
    public ItemSlot dropSlot;

    public Text levelText;
    public Text pointsText;

    public Slider strenghtSlider;
    public Slider staminaSlider;
    public Slider mindSlider;
    public Slider willpowerSlider;

    public Text strenghtText;
    public Text staminaText;
    public Text mindText;
    public Text willpowerText;

    public Button addStrenghtButton;
    public Button addStaminaButton;
    public Button addMindButton;
    public Button addWillpowerButton;

    public Text protectionPhysicalText;
    public Text protectionFireText;
    public Text protectionIceText;
    public Text protectionElectroText;

    public Text hintText;
    public Image dragIcon;
    public Color defaultTextColor = Color.grey;
    public Color highlightTextColor = Color.green;

    private ItemSlot hoveredSlot;

	WeaponController weaponControl;
	Item item;
	public GameObject StaffWhite;
	public Transform PlayerHand;

    void Start()
    {
        strenghtSlider.maxValue = ExperienceController.maxSkillLevel;
        staminaSlider.maxValue = ExperienceController.maxSkillLevel;
        mindSlider.maxValue = ExperienceController.maxSkillLevel;
        willpowerSlider.maxValue = ExperienceController.maxSkillLevel;
        addStrenghtButton.onClick.AddListener(OnAddStrenghtClick);
        addStaminaButton.onClick.AddListener(OnAddStaminaClick);
        addMindButton.onClick.AddListener(OnAddMindClick);
        addWillpowerButton.onClick.AddListener(OnAddWillpowerClick);
        hintText.text = "";

        weaponSlot.onDblClick += OnSlotDblClick;
        armorSlot.onDblClick += OnSlotDblClick;
        helmetSlot.onDblClick += OnSlotDblClick;
        amuletSlot.onDblClick += OnSlotDblClick;
        ringSlot.onDblClick += OnSlotDblClick;

        weaponSlot.onHover += OnSlotHover;
        armorSlot.onHover += OnSlotHover;
        helmetSlot.onHover += OnSlotHover;
        amuletSlot.onHover += OnSlotHover;
        ringSlot.onHover += OnSlotHover;
        dropSlot.onHover += OnSlotHover;

        foreach (ItemSlot itemSlot in slots)
        {
            itemSlot.onDblClick += OnSlotDblClick;
            itemSlot.onHover += OnSlotHover;
            itemSlot.onDrag += OnSlotDrag;
        }
        foreach (ItemSlot itemSlot in UIController.Instance.gameScreen.slots)
        {
            itemSlot.onDblClick += OnSlotDblClick;
            itemSlot.onHover += OnSlotHover;
            itemSlot.onDrag += OnSlotDrag;
        }
    }

	void Update()
    {
        if (IsShown == false) return;
        PlayerController player = PlayerController.Instance;

        levelText.text = "Level: " + player.experience.Level;
        pointsText.text = "Points: " + player.experience.Points;

        Vector2 localPoint;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(rootPanel.GetComponent<RectTransform>(), Input.mousePosition, null, out localPoint);
        if (dragIcon.gameObject.activeSelf == true)
        {
            dragIcon.transform.parent.GetComponent<RectTransform>().anchoredPosition = localPoint;
        }

        strenghtSlider.value = player.experience.Strenght;
        staminaSlider.value = player.experience.Stamina;
        mindSlider.value = player.experience.Mind;
        willpowerSlider.value = player.experience.Willpower;

        strenghtText.text = player.experience.ActualStrenght.ToString();
        staminaText.text = player.experience.ActualStamina.ToString();
        mindText.text = player.experience.ActualMind.ToString();
        willpowerText.text = player.experience.ActualWillpower.ToString();
        strenghtText.color = player.experience.AdditionalStrenght > 0 ? highlightTextColor : defaultTextColor;
        staminaText.color = player.experience.AdditionalStamina > 0 ? highlightTextColor : defaultTextColor;
        mindText.color = player.experience.AdditionalMind > 0 ? highlightTextColor : defaultTextColor;
        willpowerText.color = player.experience.AdditionalWillpower > 0 ? highlightTextColor : defaultTextColor;

        addStrenghtButton.interactable = player.experience.Points > 0 && player.experience.Strenght < ExperienceController.maxSkillLevel;
        addStaminaButton.interactable = player.experience.Points > 0 && player.experience.Stamina < ExperienceController.maxSkillLevel;
        addMindButton.interactable = player.experience.Points > 0 && player.experience.Mind < ExperienceController.maxSkillLevel;
        addWillpowerButton.interactable = player.experience.Points > 0 && player.experience.Willpower < ExperienceController.maxSkillLevel;

        protectionPhysicalText.text = "Physical: " + (Mathf.RoundToInt(player.defence.physical * 100));
        protectionFireText.text = "Fire: " + (Mathf.RoundToInt(player.defence.fire * 100));
        protectionIceText.text = "Ice: " + (Mathf.RoundToInt(player.defence.ice * 100));
        protectionElectroText.text = "Electro: " + (Mathf.RoundToInt(player.defence.electro * 100));

        weaponSlot.SetItem(player.inventory.Weapon);
        armorSlot.SetItem(player.inventory.Armor);
        helmetSlot.SetItem(player.inventory.Helmet);
        amuletSlot.SetItem(player.inventory.Amulet);
        ringSlot.SetItem(player.inventory.Ring);
        foreach (ItemSlot slot in slots)
        {
            slot.SetItem(InventoryController.Instance.Items[slot.id]);
        }
    }

    public override void Show()
    {
        base.Show();
        hintText.text = "";
        dragIcon.gameObject.SetActive(false);
    }

    private void OnAddStrenghtClick()
    {
        PlayerController.Instance.experience.AddStrenght(1, false);
    }

    private void OnAddStaminaClick()
    {
        PlayerController.Instance.experience.AddStamina(1, false);
    }

    private void OnAddMindClick()
    {
        PlayerController.Instance.experience.AddMind(1, false);
    }

    private void OnAddWillpowerClick()
    {
        PlayerController.Instance.experience.AddWillpower(1, false);
    }

    private void OnSlotDblClick(ItemSlot slot)
    {
		if (slot == weaponSlot) { InventoryController.Instance.SetWeapon(null); return; }
		if (slot == armorSlot) { InventoryController.Instance.SetArmor(null); return; }
        if (slot == helmetSlot) { InventoryController.Instance.SetHelmet(null); return; }
        if (slot == amuletSlot) { InventoryController.Instance.SetAmulet(null); return; }
        if (slot == ringSlot) { InventoryController.Instance.SetRing(null); return; }
        InventoryController.Instance.UseItem(slot.id);
    }

    private void OnSlotHover(ItemSlot slot, bool state)
    {
        if (state == true)
        {
            hoveredSlot = slot;
            if (slot.ItemInSlot != null) hintText.text = slot.ItemInSlot.name + slot.ItemInSlot.description;
        }
        else
        {
            hoveredSlot = null;
            hintText.text = "";
        }
    }

    private void OnSlotDrag(ItemSlot slot, bool state)
    {
        if (state == true)
        {
            if (slot.ItemInSlot != null)
            {
                dragIcon.gameObject.SetActive(true);
                dragIcon.sprite = slot.ItemInSlot.icon;
				//Debug.Log ("Tu déplace un objet dans l'inventaire!"); // Okay
            }
        }
        else
        {
			if (slot.ItemInSlot != null && hoveredSlot != null)
            {
				if (hoveredSlot.slotType == ItemSlot.SlotTypes.Drop )
                {
                    InventoryController.Instance.Drop(slot.id);
					Debug.Log (slot.ItemInSlot.name); // Name of the object thrown (If I slip the icon of the object in a specific slot, I get the name of this object)
					//Instantiate objects in scene
					Instantiate (Resources.Load ("Objets/" + slot.ItemInSlot.name) as GameObject, PlayerHand.position, Quaternion.identity);
                }
                if (hoveredSlot.slotType == ItemSlot.SlotTypes.Backpack)
                {
                    InventoryController.Instance.Move(slot.id, hoveredSlot.id);
					//Debug.Log ("Objet posé dans une case de l'inventaire"); //fonctionne
                }
            }
            dragIcon.gameObject.SetActive(false);
        }
    }
}


Typiquement, ça c'est chaud à répondre.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Inventaire UI Vie Objets

Message par simonj » 31 Jan 2017 15:52

Quand tu détectes que ton objet n'as plus de vie, tu peux faire ça :

Code : Tout sélectionner

InventoryController.Instance.SetWeapon(null);
Ca enlèveras l'objet de ton slot dans l'inventaire.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: Inventaire UI Vie Objets

Message par Farstone » 10 Fév 2017 17:10

Dans le cas ou l'auteur serrait encore dans les parages, je tient a préciser quelques points sur ton script et ta façons de faire.
Vraisemblablement tu a suivit un tuto en recopiant bêtement les lignes que tu a vue, ce qui est une énorme erreur, si tu tient a faire les choses bien tu va devoir recommencer le tuto ou un autres en te forçant a comprendre chaque ligne et son utilité dans le script et croit moi, suivre un tuto de ce genre avec des list etc et ce forcer a comprendre le fonctionnement de chaque fonction en lisant la doc c'est le meilleur moyen d'apprendre la programmation très rapidement si tu en a l'envie bien-sûr et je sait de quoi je parle.
Tu nous demande de comprendre ton script mais j'aimerais savoir ou se trouve se script et comment est agencé ton projet (a tu plusieurs GameObject fessant office de slot et qui gère quoi) car la ton script n'est pas très propre pour être gentil, mais il est fonctionnel c'est déjà ça, si tu ne sait pas comment supprimer un objet de ton inventaire c'est qu'il y a déjà un problème après toutes c'est lignes. Tu pourrais nous donner le tuto de base, et nous dire si tu a rajouté du code par dessus le tutoriel qui n'a pas l'air facile a adapté selon t'es besoins.
Voici un tuto pour un inventaire qui te permettra de progresser énormément si tu cherche a tout comprendre et il est facilement adaptable une fois que tu a compris comment marche la programmation : Faire un inventaire (en anglais)

emma43210
Messages : 23
Inscription : 28 Jan 2017 11:36

Re: Inventaire UI Vie Objets

Message par emma43210 » 10 Fév 2017 22:35

Merci, et oui je sais que ce n'est pas la bonne technique je m'en suis rendue compte à la fin des tutos qu'en faite je n'ai rien retenu et surtout rien appris :/
Donc je pense resuivre un tuto avec toutes les bases des UI car ça m'a un peu perdue ^^'

La personne qui a fait les tutos avais mis l'asset et je l'ai téléchargée pour voir si j'avais le même résultats. Donc la j'ai le projet complet que la personne à mise mais je ne comprends pas trop (bien que depuis j'ai réussie à en comprendre plus :p)

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: Inventaire UI Vie Objets

Message par Farstone » 11 Fév 2017 02:55

Il faut que je sache comment est organisé ta hiérarchie dans Unity.

Répondre

Revenir vers « L'interface GUI »