[RESOLU][DB-AL] freeze pause menu

Toutes les questions sur le développement Mobile, y compris la partie script.
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] freeze pause menu

Message par boubouk50 » 07 Fév 2018 10:09

Je vois que tu as réussi à cibler un peu plus précisément le problème. Ce serait donc seulement des textes? Il ne te reste plus qu'à affiner la recherche pour trouver la véritable cause. C’est ça le débogage, comme on dit mochement en français.
(Par contre, je ne vais pas DL et tester ton prefab)
"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
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

Re: [DB-AL] freeze pause menu

Message par Paullux » 07 Fév 2018 14:07

J'ai découvert un truc que je ne m'explique pas.

J'ai créé un nouveau script C# j'y ai collé le code du précédent et ça marche.

J'ai parlé trop vite, dès que j'ai dupliqué le texte avec le script cela ne fonctionne plus.
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

Avatar de l’utilisateur
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

(RéSOLU) Re: [DB-AL] freeze pause menu

Message par Paullux » 07 Fév 2018 22:30

J'ai résolu le problème, comme je l'avais expliqué, j'avais 64 boutons avec des scrollbars qui essayer de se mettre à jour toutes en même temps à chaque frame dès l'ouverture du menu faisait friser le menu, du coup j'ai amélioré le code, comme tu me l'as suggérer Bouzouk50 et j'ai fait apparaitre les scrollbars uniquement quand j'en ai besoin, voici le code :

Code : Tout sélectionner

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

public class ChoixBuild : MonoBehaviour {

    public GameObject Blank;
    public GameObject Construc1;
    public GameObject Construc2;
    public GameObject Construc3;
    public Text TauxConstruc;
    public string Cell;
    private int vide;

    //liés à la progressbar
    public float progress = 0.0f;
    public Texture2D emptyProgressBar; // Set this in inspector.
    public Texture2D fullProgressBar; // Set this in inspector.
    public Vector2 pos = new Vector2(20, 40);
    public Vector2 size = new Vector2(60, 20);
    public bool StartBar = false;
    public float TempsDepart = 0f;
    public Scrollbar ProgressBarre;
    private bool PeutChanger;

    void OnEnable()
    {
        ProgressBarre.gameObject.SetActive(false);
        PeutChanger = true;
        vide = PlayerPrefs.GetInt("C" + Cell.ToString() + "Number");
        if (vide == 0) PlayerPrefs.SetInt("C" + Cell.ToString() + "Type", 0);
        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Type") == 0)
        {
            Blank.SetActive(true);
            Construc1.SetActive(false);
            Construc2.SetActive(false);
            Construc3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Type") == 1)
        {
            Blank.SetActive(false);
            Construc1.SetActive(true);
            Construc2.SetActive(false);
            Construc3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Type") == 2)
        {
            Blank.SetActive(false);
            Construc1.SetActive(false);
            Construc2.SetActive(true);
            Construc3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Type") == 3)
        {
            Blank.SetActive(false);
            Construc1.SetActive(false);
            Construc2.SetActive(false);
            Construc3.SetActive(true);
        }
        TauxConstruc.text = "";

        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Type") != 0) TauxConstruc.text = vide + "/5";
    }

    void Update()
    {
        //Liés à la progressbar
        if (StartBar == true && !Blank.activeSelf && vide != 0)
        {
            progress = (Time.unscaledTime - TempsDepart) * 0.5f;
        }
        if (progress > 1.00f && PeutChanger)
        {
            ChangeWeapon();
            PeutChanger = false;
        }
        ProgressBarre.size = progress;
    }

    //Liés à la prosgressbar
    public void BarreStart()
    {
        if (!ProgressBarre.gameObject.activeSelf) ProgressBarre.gameObject.SetActive(true);
        TempsDepart = Time.unscaledTime;
        StartBar = true;
    }
    public void BarreStop()
    {
        progress = 0f;
        StartBar = false;
        PeutChanger = true;
        if (ProgressBarre.gameObject.activeSelf) ProgressBarre.gameObject.SetActive(false);
    }
    //Choix de la Langue
    //Choix de la Langue
    public void ChangeWeapon()
    {
        if (PlayerPrefs.GetInt("C" + Cell.ToString() + "Number") != 0)
        {
            vide = PlayerPrefs.GetInt("C" + Cell.ToString() + "Number") - 1;
            PlayerPrefs.SetInt("C" + Cell.ToString() + "Number", vide);
            TauxConstruc.text = vide + "/5";
        }
    }
}
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

Avatar de l’utilisateur
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

Re: [RESOLU][DB-AL] freeze pause menu

Message par Paullux » 11 Fév 2018 18:58

Je ne comprends toujours pas pourquoi ça ne marche pas... Hier j'ai essayé d'améliorer mon menu et aujourd'hui, ça déconne à nouveau. C'est une histoire à s'arracher les cheveux.

Voici la liste des symptômes :
-En mode teste sur le PC tout fonctionne correctement.
-Sur mon téléphone, ça déconne.

Le jeu fonctionne sauf le menu, quand j'appuie sur le bouton assigné au menu, le jeu freeze, la track de position du joueur ne se fait plus, les sons continus, plus rien ne bouge dans l'affichage. Le fait de ré-appuyer sur le bouton du menu, le jeu continu comme si de rien n'était (aussi comme attendu).

Le menu est constitué de 4 panneaux (dont 1 inactif en permanence aujourd'hui). Sur chacun des menu, il y a une grille de 4 x 4 items à ramasser, mais il y a une case ou deux réservées, à nombre de munitions, au niveau de l'armure ou au niveau de vie.

J'ai un script pour l'activation et désactivation du menu :

Code : Tout sélectionner

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

public class Menu : MonoBehaviour
{
    public GameObject Inventaire01, Inventaire02, Inventaire03; //Inventaire04;
    public Text TextInventaire01;
    public Text TextInventaire02;
    public Text TextInventaire03;
    //public Text TextInventaire04;
    private string attack;
    private string armor;
    private string health;
    //private string build;
    public GameObject Language;
    private int AfficheMenu;
    public GameObject minimapCanvas;

    // Use this for initialization
    void Start()
    {
        Inventaire01.SetActive(false);
        Inventaire02.SetActive(false);
        Inventaire03.SetActive(false);
        //Inventaire04.SetActive(false);
        Time.timeScale = 1;
        attack = Language.GetComponent<xmlReader>().attack;
        armor = Language.GetComponent<xmlReader>().armor;
        health = Language.GetComponent<xmlReader>().health;
        //build = Language.GetComponent<xmlReader>().build;
        TextInventaire01.text = attack;
        TextInventaire02.text = armor;
        TextInventaire03.text = health;
        //TextInventaire04.text = build;
        PlayerPrefs.SetInt("MenuActive", 0);
        AfficheMenu = PlayerPrefs.GetInt("menuInt");
    }

    // Update is called once per frame
    void Update()
    {
        if (Time.timeScale == 1)
        {
            if (Input.GetKeyDown((KeyCode)AfficheMenu))
            {
                minimapCanvas.SetActive(false);
                Time.timeScale = 0f;
                Inventaire01.SetActive(true);
                Inventaire02.SetActive(true);
                Inventaire03.SetActive(true);
                //Inventaire04.SetActive(true);
                PlayerPrefs.SetInt("MenuActive", 1);
            }
                
        } else
        {
            if (Input.GetKeyDown((KeyCode)AfficheMenu))
            {
                Time.timeScale = 1;
                Inventaire01.SetActive(false);
                Inventaire02.SetActive(false);
                Inventaire03.SetActive(false);
                //Inventaire04.SetActive(false);
                minimapCanvas.SetActive(true);
                PlayerPrefs.SetInt("MenuActive", 0);
            }
        }
    }
}
Dans les menus j'ai 6 scripts différents dans les images, un par bouton :
1. La gestion des items santés ramassés :

Code : Tout sélectionner

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

public class ChoixSoin : MonoBehaviour {

    public GameObject Blank;
    public GameObject MK1;
    public GameObject MK2;
    public GameObject MK3;
    public Text TauxDeSoin;
    public int ptv;
    public int Cell;
    private int vide, CoupFeu;
    public bool StartBar = false;

    void Start()
    {
        CoupFeu = PlayerPrefs.GetInt("FireInt");
    }
    void OnEnable()
    {
        vide = PlayerPrefs.GetInt("H" + Cell.ToString() + "Number");
        if (vide == 0) PlayerPrefs.SetInt("H" + Cell.ToString() + "Type", 0);
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 0)
        {
            Blank.SetActive(true);
            MK1.SetActive(false);
            MK2.SetActive(false);
            MK3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 1)
        {
            Blank.SetActive(false);
            MK1.SetActive(true);
            MK2.SetActive(false);
            MK3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 2)
        {
            Blank.SetActive(false);
            MK1.SetActive(false);
            MK2.SetActive(true);
            MK3.SetActive(false);
        }
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 3)
        {
            Blank.SetActive(false);
            MK1.SetActive(false);
            MK2.SetActive(false);
            MK3.SetActive(true);
        }
        TauxDeSoin.text = "";
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") != 0) TauxDeSoin.text = PlayerPrefs.GetInt("H" + Cell.ToString() + "Number") + "/5";
        StartBar = false;
    }

    void Update()
    {
        if (StartBar && Input.GetKeyDown((KeyCode)CoupFeu))
        {
            ChangeWeapon();
        }
    }
    public void BarreStart()
    {
        StartBar = true;
    }
    public void BarreStop()
    {
        StartBar = false;
    }
    public void ChangeWeapon()
    {
        ptv = GetComponentInParent<PointDeVie>().getHP();
        if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Number") > 0)
        {
            if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 1)
            {
                GetComponentInParent<PointDeVie>().setHP(ptv + 20);
                if (GetComponentInParent<PointDeVie>().getHP() >= 100) GetComponentInParent<PointDeVie>().setHP(100);
            }
            if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 2)
            {
                GetComponentInParent<PointDeVie>().setHP(ptv + 50);
                if (GetComponentInParent<PointDeVie>().getHP() >= 100) GetComponentInParent<PointDeVie>().setHP(100);
            }
            if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Type") == 3)
            {
                GetComponentInParent<PointDeVie>().setHP(ptv + 70);
                if (GetComponentInParent<PointDeVie>().getHP() >= 100) GetComponentInParent<PointDeVie>().setHP(100);
            }
            if (PlayerPrefs.GetInt("H" + Cell.ToString() + "Number") != 0)
            {
                vide = PlayerPrefs.GetInt("H" + Cell.ToString() + "Number") - 1;
                PlayerPrefs.SetInt("H" + Cell.ToString() + "Number", vide);
                TauxDeSoin.text = vide + "/5";
            }
        }
    }
}
2. l'affichage du niveau de vie :

Code : Tout sélectionner

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

public class ChoixSoinPTV : MonoBehaviour {

    public GameObject Blank;
    public GameObject Soin;
    public int Cell;
    public int ptv;
    public Text TauxDeSoin;
    //liés à la progressbar
    public float progress = 0.0f;
    public Texture2D emptyProgressBar; // Set this in inspector.
    public Texture2D fullProgressBar; // Set this in inspector.
    public Vector2 pos = new Vector2(20, 40);
    public Vector2 size = new Vector2(60, 20);
    public bool StartBar = false;
    public Scrollbar ProgressBarre;

    void OnEnable()
    {
        Blank.SetActive(false);
        Soin.SetActive(true);
    }

    // Update is called once per frame
    void Update()
    {
        ptv = GetComponentInParent<PointDeVie>().getHP();
        TauxDeSoin.text = ptv + "%";
        
        //Liés à la progressbar
        progress = (float)ptv / 100;
        ProgressBarre.size = progress;
    }
}
3. la gestion des items d'armures ramassé :

Code : Tout sélectionner

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

public class ChoixArmure : MonoBehaviour {
    public GameObject Blank;
    public GameObject Casque;
    public GameObject Armure;
    public GameObject Combinaison;
    public Text DegP;
    public int pta;
    public int Cell;
    private int CoupFeu;
    public bool StartBar = false;

    void Start()
    {
        CoupFeu = PlayerPrefs.GetInt("FireInt");
    }
    void OnEnable()
    {
        pta = PlayerPrefs.GetInt("Armor");
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Number") == 0) PlayerPrefs.SetInt("D" + Cell.ToString() + "Type", 0);
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 0)
        {
            Blank.SetActive(true);
            Casque.SetActive(false);
            Armure.SetActive(false);
            Combinaison.SetActive(false);
        }
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 1)
        {
            Blank.SetActive(false);
            Casque.SetActive(true);
            Armure.SetActive(false);
            Combinaison.SetActive(false);
        }
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 2)
        {
            Blank.SetActive(false);
            Casque.SetActive(false);
            Armure.SetActive(true);
            Combinaison.SetActive(false);
        }
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 3)
        {
            Blank.SetActive(false);
            Casque.SetActive(false);
            Armure.SetActive(false);
            Combinaison.SetActive(true);
        }

        DegP.text = "";
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") != 0) DegP.text = PlayerPrefs.GetInt("D" + Cell.ToString() + "Number") + "/5";
        StartBar = false;
    }

    void Update()
    {
        if (StartBar && Input.GetKeyDown((KeyCode)CoupFeu))
        {
            ChangeWeapon();
        }
    }
    public void BarreStart()
    {
        StartBar = true;
    }
    public void BarreStop()
    {
        StartBar = false;
    }
    public void ChangeWeapon()
    {
        if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Number") > 0)
        {
            if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 1)
            {
                PlayerPrefs.SetInt("Armor", PlayerPrefs.GetInt("Armor") + 20);
                if (PlayerPrefs.GetInt("Armor") >= 100) PlayerPrefs.SetInt("Armor", 100);
            }
            if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 2)
            {
                PlayerPrefs.SetInt("Armor", PlayerPrefs.GetInt("Armor") + 50);
                if (PlayerPrefs.GetInt("Armor") >= 100) PlayerPrefs.SetInt("Armor", 100);
            }
            if (PlayerPrefs.GetInt("D" + Cell.ToString() + "Type") == 3)
            {
                PlayerPrefs.SetInt("Armor", PlayerPrefs.GetInt("Armor") + 70);
                if (PlayerPrefs.GetInt("Armor") >= 100) PlayerPrefs.SetInt("Armor", 100);
            }
            PlayerPrefs.SetInt("D" + Cell.ToString() + "Number", PlayerPrefs.GetInt("D" + Cell.ToString() + "Number") - 1);
            DegP.text = PlayerPrefs.GetInt("D" + Cell.ToString() + "Number") + "/5";
        }

    }
}
4. l'affichage du niveau d'armure :

Code : Tout sélectionner

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

public class ChoixArmurePT : MonoBehaviour
{
    public GameObject Blank;
    public GameObject Armure;
    public int Cell;
    public int pta;
    public Text DegP;
    //liés à la progressbar
    public float progress = 0.0f;
    public Texture2D emptyProgressBar; // Set this in inspector.
    public Texture2D fullProgressBar; // Set this in inspector.
    public Vector2 pos = new Vector2(20, 40);
    public Vector2 size = new Vector2(60, 20);
    public bool StartBar = false;
    public Scrollbar ProgressBarre;

    void OnEnable()
    {
        Blank.SetActive(false);
        Armure.SetActive(true);
    }


    // Update is called once per frame
    void Update()
    {
        pta = PlayerPrefs.GetInt("Armor");
        DegP.text = pta + "%";

        //Liés à la progressbar
        progress = (float)pta / 100;
        ProgressBarre.size = progress;
    }
}
5. gestion des armes ramassés :

Code : Tout sélectionner

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

public class ChoixArme : MonoBehaviour {
    public GameObject Blank;
    public GameObject Couteau;
    public GameObject Pistolet;
    public GameObject Fusil;
    public Text Munit;
    public float MunitValue;
    public float Chargeur;
    public float BulletValue;
    public int Cell, CoupFeu;
    private int vide;
    public bool StartBar = false;

    void Start()
    {
        CoupFeu = PlayerPrefs.GetInt("FireInt");
    }
    void OnEnable()
    {
        if (Cell == 0)
        {
            PlayerPrefs.SetInt("A" + Cell.ToString() + "Type", 1);
            if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Number") == 0) PlayerPrefs.SetInt("A" + Cell.ToString() + "Number", 1);
        }

        vide = PlayerPrefs.GetInt("A" + Cell.ToString() + "Number");
        if (vide == 0) PlayerPrefs.SetInt("A" + Cell.ToString() + "Type", 0);
        MunitValue = GetComponentInParent<AMMO>().getAMMO();
        Chargeur = GetComponentInParent<AMMO>().getChargeur();
        BulletValue = GetComponentInParent<AMMO>().getBullet();
        Munit.text = "";
        if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Type") == 0)
        {
            Blank.SetActive(true);
            Couteau.SetActive(false);
            Pistolet.SetActive(false);
            Fusil.SetActive(false);
        }
        if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Type") == 1)
        {
            Blank.SetActive(false);
            Couteau.SetActive(true);
            Pistolet.SetActive(false);
            Fusil.SetActive(false);
        }
        if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Type") == 2)
        {
            Blank.SetActive(false);
            Couteau.SetActive(false);
            Pistolet.SetActive(true);
            Fusil.SetActive(false);
        }
        if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Type") == 3)
        {
            Blank.SetActive(false);
            Couteau.SetActive(false);
            Pistolet.SetActive(false);
            Fusil.SetActive(true);
        }
        if (vide != 0) Munit.text = PlayerPrefs.GetInt("A" + Cell.ToString() + "Number") + "/5";
        StartBar = false;
    }

    void Update()
    {
        if (StartBar &&  Input.GetKeyDown((KeyCode)CoupFeu))
        {
            ChangeWeapon();
        }
    }

    public void BarreStart()
    {
        StartBar = true;
    }
    public void BarreStop()
    {
        StartBar = false;
    }
    public void ChangeWeapon()
    {
        if (Blank.activeSelf) { GetComponentInParent<AMMO>().setArme(0); }
        if (Couteau.activeSelf) { GetComponentInParent<AMMO>().setArme(1); }
        if (Pistolet.activeSelf) { GetComponentInParent<AMMO>().setArme(2); }
        if (Fusil.activeSelf) { GetComponentInParent<AMMO>().setArme(3); }
        if (PlayerPrefs.GetInt("A" + Cell.ToString() + "Number") != 0)
        {
            vide = PlayerPrefs.GetInt("A" + Cell.ToString() + "Number") - 1;
            PlayerPrefs.SetInt("A" + Cell.ToString() + "Number", vide);
            Munit.text = vide + "/5";
        }
    }
}
et 6. l'affichage des munitions:

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.UI;

public class ChoixArmeMunit : MonoBehaviour {

    public GameObject Blank;
    public GameObject Armes;
    public Text Munit;
    public float MunitValue;
    public float Chargeur;
    public float BulletValue;
    public int Cell;
    //liés à la progressbar
    public float progress = 0.0f;
    public Texture2D emptyProgressBar; // Set this in inspector.
    public Texture2D fullProgressBar; // Set this in inspector.
    public Vector2 pos = new Vector2(20, 40);
    public Vector2 size = new Vector2(60, 20);
    public bool StartBar = false;
    public float TempsDepart = 0f;
    public Scrollbar ProgressBarre;

    void OnEnable()
    {
        Blank.SetActive(false);
        Armes.SetActive(true);
    }

    void Update()
    {
        MunitValue = GetComponentInParent<AMMO>().getAMMO();
        Chargeur = GetComponentInParent<AMMO>().getChargeur();
        BulletValue = GetComponentInParent<AMMO>().getBullet();
        if (Armes.name == "MunitionsPistolet")
        {
            Munit.text = Chargeur + "/" + MunitValue;
        }

        if (Armes.name == "MunitionsFusil")
        {
            Munit.text = BulletValue + "";
        }
        //Liés à la progressbar
        progress = 0f;
        if (Armes.name == "MunitionsPistolet" && (Chargeur + MunitValue) <= 1000) progress = (Chargeur + MunitValue) / 1000;
        if (Armes.name == "MunitionsFusil" && BulletValue <= 500) progress = BulletValue / 500;
        if (Armes.name == "MunitionsPistolet" && (Chargeur + MunitValue) > 1000) progress = 1;
        if (Armes.name == "MunitionsFusil" && BulletValue > 500) progress = 1;

        ProgressBarre.size = progress;
    }
}
Ai-je commis une faute, savez-vous si je rentre en conflit avec les limites de Google VR (j'utilise le SDK Google VR pour Android) ?
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

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

Re: [PLUS RESOLU][DB-AL] freeze pause menu

Message par boubouk50 » 12 Fév 2018 11:35

Je me suis pas amusé à tout lire tellement c'est redondant.
Déjà en terme de performances:
tu fais des appels successifs aux PlayerPrefs totalement inutiles, et comme déjà répété plusieurs fois: C'est lent et lourd.
Par exemple:

Code : Tout sélectionner

void Update()
{
	pta = PlayerPrefs.GetInt("Armor");
Cela veut dire qu'à chaque frame tu vas chercher les points d'armures stockés. Totalement inutiles. Ce pta ne change pas à chaque frame, il faut le mettre à jour seulement lorsque des actions le modifient.

Code : Tout sélectionner

void Update()
    {
        MunitValue = GetComponentInParent<AMMO>().getAMMO();
        Chargeur = GetComponentInParent<AMMO>().getChargeur();
        BulletValue = GetComponentInParent<AMMO>().getBullet();
Pareil, un appel à chaque frame pour aller chercher tjs la même chose. Cherche là une seule fois au Start () et ensuite accèdes-y directement.

Aussi, comme tu es sur Android, comment simules tu les Input?

Code : Tout sélectionner

Input.GetKeyDown((KeyCode)CoupFeu)
Parce que tu n'as pas de clavier à ce que je sache...
"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
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

Re: [PLUS RESOLU][DB-AL] freeze pause menu

Message par Paullux » 12 Fév 2018 16:52

J'ai une manette bluetooth.

J'ai créé un menu de choix des touches dans le menu d'acceuil.

Je vais essayé de faire ce que tu m'as dis ce soir.

Si je ne vais chercher et mettre à jour le texte qu'au démarrage (OnEnable marcherait il ? car en jeu les valeurs peuvent varier et Start ne mettrait pas à jour par rapport au jeu) et à chaque modification, cela serait mieux qu'à chaque frame c'est ça que tu me dit ?

Et si j'attends avec routine l'activation du tableau 1 pour afficher le 2 puis l'activation du 2 pour afficher le 3, ça ne serait pas mieux où cela demanderait trop de ressources ?
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

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

Re: [PLUS RESOLU][DB-AL] freeze pause menu

Message par boubouk50 » 12 Fév 2018 17:33

Le principal problème ici, c'est la conception, bien avant l'optimisation ou l'algo. Et essayer de remettre sur pied son cheval malade est parfois plus long et difficile que d'en entraîner un nouveau en bonne santé...
Il faudrait, de mon point de vue, revoir la conception du code de ton menu de façon plus événementielle. Chaque action/clic entraîne un événement qui gère tout ce qu'il doit à cet instant t. Ainsi, aucun calcul n'est effectué en dehors de cela (sauf ta progressBar). Ça évite ce genre de problème de freeze et de perte de fps.
Après, ce que je ne comprends pas, c'est pourquoi seul un menu est affecté par cela et pas les 3 autres, s'ils font plus ou moins la même chose...
"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
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

Re: [PLUS RESOLU][DB-AL] freeze pause menu

Message par Paullux » 13 Fév 2018 09:37

Tu as raison, je vais repartir de zéro, j'ai trouvé un tuto qui explique bien comment faire : https://www.youtube.com/watch?v=mR47TBbmsAI

Je vais gérer l'ensemble de mes stocks depuis l'inventaire, et les autres scripts agiront dessus.

Il me reste une question, est-ce qu'il est possible de détecter quand un joueur quitte brutalement le jeu pour sauver l'inventaire avec ArrayPrefs ? Je n'utiliserai les ArrayPrefs qu'au démarrage de la scène, lors du passage au niveau suivant et lors du moment où on quitte le jeu vers le menu d’accueil.
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

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

Re: [PLUS RESOLU][DB-AL] freeze pause menu

Message par boubouk50 » 13 Fév 2018 10:10

S'il quitte brutalement, c'est à dire sans passer par le jeu lui-même, c'est mort pour lui. Il a qu'à quitter normalement. Sinon, tu peux faire une sauvegarde avant de quitter, ce sera à toi de l'écrire.
https://docs.unity3d.com/ScriptReferenc ... .Quit.html
https://docs.unity3d.com/ScriptReferenc ... lQuit.html
https://docs.unity3d.com/ScriptReferenc ... nQuit.html
"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
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

Re: [RESOLU][DB-AL] freeze pause menu

Message par Paullux » 16 Fév 2018 19:32

Comme écris précédemment, j'ai recréé mon menu mais il continuait à bugger. J'avais remis des scrollbars pour afficher le nombre de munitions, de vie ou d'armure. Et je ne sais pas pourquoi les scrollbars mettait le bazarre.

En enlevant les scrollbars, le menu s'affiche de manière fluide, tout à l'air OK.
(A la place, j'ai joué sur la couleur de bouton du menu pour représenter mes items.)
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »