[DB-AL] Problème de curseur menu pause

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
taylor42
Messages : 4
Inscription : 06 Avr 2017 15:58

[DB-AL] Problème de curseur menu pause

Message par taylor42 » 06 Avr 2017 16:14

Bonjour,

Je suis actuellement étudiant dans une école d'informatique et je créé un jeu vidéo. Je suis chargé de la création des menus. Pour le menu principal, pas de problème, tout fonctionne normalement. Par contre, pour ce qui est du menu pause, je rencontre quelques difficultés. Mon menu pause se déclenche lorsqu’on appuie sur la touche échap. IL met le jeu en pause (on reste dans la même salle) et on peut alors : reprendre le jeu (en rappuyant sur échap ou sur le bouton "reprendre"), quitter le jeu ou rejoindre le menu principal (grâce aux boutons "Menu principal" et "Quitter").

Mon problème est le suivant : pour que le curseur soit visible, je dois lancer le menu pause, puis le quitter grâce à la touche échap et enfin le relancer. Ensuite, le curseur est toujours visible, quand bien même j'ai quitté le menu pause. Il y a quelque chose d'étrange : ce problème n'apparaît que quand je build le jeu, pas quand je le teste dans la partie où l'on peut modifier notre jeu.

Voici le script que j'utilise pour mon menu pause :

Code : Tout sélectionner

public class MenuPause : MonoBehaviour {
    public Transform pause;
    public Transform Player;
    public bool dejamuet = false;
    public float vol;
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (pause.gameObject.activeInHierarchy == false)
            {
                Cursor.visible = true;
                pause.gameObject.SetActive(true);
                Time.timeScale = 0F;
                Player.GetComponent<FirstPersonController>().enabled = false;
            }
            else
            {
                Cursor.visible = false;
                pause.gameObject.SetActive(false);
                Time.timeScale = 1F;
                Player.GetComponent<FirstPersonController>().enabled = true;
            }
        }
	}
    public void Volumeplus()
    {
        if (AudioListener.volume < 1.0F)
            AudioListener.volume += 0.1F;
        else
            AudioListener.volume = 1F;
    }
    public void Volumemoins()
    {
        if (AudioListener.volume > 0F)
            AudioListener.volume -= 0.1F;
        else
            AudioListener.volume = 0F;
    }
    public void Muet()
    {
        if (!dejamuet)
        {
            vol = AudioListener.volume;
            AudioListener.volume = 0F;
            dejamuet = !dejamuet;
        }
        else
        {
            AudioListener.volume = vol;
            dejamuet = !dejamuet;
        }
    }
    public void Quitter()
    {
        Application.Quit();
    }
    public void Reprendre()
    {
        pause.gameObject.SetActive(false);
        Time.timeScale = 1F;
        Player.GetComponent<FirstPersonController>().enabled = true;
        Cursor.visible = false;
    }
    public void MenuPrincipal(string name)
    {
        SceneManager.LoadScene(name);
    }
}
 ! Message de : boubouk50
Balises Code stp. 5e bouton du menu.
Merci pour votre aide :)

taylor42
Messages : 4
Inscription : 06 Avr 2017 15:58

Re: [DB-AL] Problème de curseur menu pause

Message par taylor42 » 15 Avr 2017 17:19

Désolé je ne comprends que dois-je modifier ?

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Problème de curseur menu pause

Message par Max » 15 Avr 2017 17:58

Bonjour,
taylor42 a écrit :Désolé je ne comprends que dois-je modifier ?
il s'agissait des balises codes que tu n'avait pas employé lors de ton premier message. Elles ont été insérées par Boubouk, qui en même temps te signifiait le fait de penser à le faire par la suite.

Concernant ton soucis, au vue de ton code, je ne vois pas trop la source du soucis, si ce n'est que tu fais des appels 'Cursor.visible = true/false' dans pas mal d'endroit de ton code. Il serait intéressant de traquer/rationnaliser le truc.
A savoir que normalement c'est le genre de chose qui fonctionne plutôt bien (editor comme build), donc...
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

taylor42
Messages : 4
Inscription : 06 Avr 2017 15:58

Re: [DB-AL] Problème de curseur menu pause

Message par taylor42 » 15 Avr 2017 19:16

Max a écrit :Bonjour,
taylor42 a écrit :Désolé je ne comprends que dois-je modifier ?
il s'agissait des balises codes que tu n'avait pas employé lors de ton premier message. Elles ont été insérées par Boubouk, qui en même temps te signifiait le fait de penser à le faire par la suite.

Concernant ton soucis, au vue de ton code, je ne vois pas trop la source du soucis, si ce n'est que tu fais des appels 'Cursor.visible = true/false' dans pas mal d'endroit de ton code. Il serait intéressant de traquer/rationnaliser le truc.
A savoir que normalement c'est le genre de chose qui fonctionne plutôt bien (editor comme build), donc...
Alors merci à toi Boubouk et désolé pour l'erreur.
Du coup je vais essayer de voir ce que je peux faire concernant mes 'Cursor.visible = true/false' merci pour le conseil.

taylor42
Messages : 4
Inscription : 06 Avr 2017 15:58

Re: [DB-AL] Problème de curseur menu pause

Message par taylor42 » 19 Avr 2017 15:11

Bonjour à tous !
J'ai fini par trouver la solution.
Voici mon nouveau script pour le menu Pause :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityStandardAssets.Characters.FirstPerson;

public class MenuPause : MonoBehaviour {
    public Transform pause;
    public Transform Player;
    public bool dejamuet = false;
    public float vol;
    public bool vis = true;
    void Update ()
    {  
      if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (pause.gameObject.activeInHierarchy == true)
                Reprendre();
            else
            {
                pause.gameObject.SetActive(true);
                Time.timeScale = 0F;
                Player.GetComponent<FirstPersonController>().enabled = false;
            }
        }
        if (pause.gameObject.activeInHierarchy == true)
        {
            Cursor.visible = true;
            Cursor.lockState = CursorLockMode.None;
        }
        else
            Cursor.visible = false;
    }
   public void Volumeplus()
    {
        if (AudioListener.volume < 1.0F)
            AudioListener.volume += 0.1F;
        else
            AudioListener.volume = 1F;
    }
    public void Volumemoins()
    {
        if (AudioListener.volume > 0F)
            AudioListener.volume -= 0.1F;
        else
            AudioListener.volume = 0F;
    }
    public void Muet()
    {
        if (!dejamuet)
        {
            vol = AudioListener.volume;
            AudioListener.volume = 0F;
            dejamuet = !dejamuet;
        }
        else
        {
            AudioListener.volume = vol;
            dejamuet = !dejamuet;
        }
    }
    public void Quitter()
    {
        Application.Quit();
    }
    public void Reprendre()
    {
        pause.gameObject.SetActive(false);
        Time.timeScale = 1F;
        Player.GetComponent<FirstPersonController>().enabled = true;
    }
    public void MenuPrincipal(string name)
    {
        SceneManager.LoadScene(name);
    }
}
J'ai juste modifier la méthode Update();.
Malheureusement, cela a mis un autre problème en évidence ... En effet, quand j'appelle le menu principal depuis le menu pause et que je tente de lancer une nouvelle partie, cela ne fonctionne pas, alors qu'il n'y a pas de problème avec le lancement d’une nouvelle partie quand on lance le jeu pour la première fois. Auriez-vous une idée de ne qui ne va pas ?

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

Re: [DB-AL] Problème de curseur menu pause

Message par boubouk50 » 19 Avr 2017 15:21

Remets-tu le timescale à 1 avant de charger ta scène?

Aussi, concernant ton code, un peu de logique réduirait les calculs inutiles:
Un Update () est appelé à chaque frame, donc il ne faut pas traiter les événements à l'intérieur, c'est la cas ici pour le curseur qui ne doit être affiché ou masqué selon la pause. Si ta pause n'est gérée que par le bouton Echap, alors tu peux l'intégrer à la condition de test du bouton. Laisser une condition ouverte (if + else) implique donc qu'à chaque frame ton curseur sera masqué ou affiché, donc que des calculs inutiles sont fait. Ça parait dérisoire comme ça (et ça l'est pour cet exemple) mais c'est un premier pas vers une application qui ne rame pas. La fonction Update () est très gourmande (même vide), il faut s'en proscrire au maximum, ce qui peut être fait vu qu'ici tu gères des événements et pas des calculs continus.

Code : Tout sélectionner

void Update ()
    {  
      if (Input.GetKeyDown(KeyCode.Escape))
      {
            if (pause.gameObject.activeInHierarchy) {
            	Cursor.visible = true;
            	Cursor.lockState = CursorLockMode.None;
                Reprendre();
            }
            else
            {
            	Cursor.visible = false;
                pause.gameObject.SetActive(true);
                Time.timeScale = 0F;
                Player.GetComponent<FirstPersonController>().enabled = false;
            }
        }            
    }
"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

Répondre

Revenir vers « (C#) CSharp »