Ges ons des scènes et variables globales (var sta c)

Transcription

Ges ons des scènes et variables globales (var sta c)
 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Ges ons des scènes et variables globales (var sta c) Types de variables dans Unity Variables publiques (public var) Déclarées à l'extérieur des fonc ons, généralement dans le haut d'un script, les variables publiques sont des variables de membre (« member variables »), ce qui signifie que chaque instance d'un script possédera sa propre variable. Le mot clé « public » lors de la déclara on de la variable est faculta f. Ce type de variable est par la suite accessible dans l'inspecteur de Unity, lorsque le GameObject qui possède une instance de ce script est sélec onné. Note : Il est généralement recommandé de donner les valeurs aux variables publiques dans l'inspecteur de Unity et non dans le script directement. Notez également que si vous donnez une valeur à la variable dans le script ET dans l'inspecteur, c'est la valeur entrée dans l'inspecteur qui aura priorité. Une autre méthode à privilégier est d’ini aliser les variables dans la fonc on Start( ). // déclara on et ini alisa on de la variable publique energie avec ou sans le mot clé « public » var energie : int = 100; public var energie : int = 100; // déclara onde la variable public energie. La valeur sera donnée dans l'inspecteur de Unity. var energie : int; func on Start () { energie = 100; } Dans l'exemple ci‐dessus, si le script est associé à plusieurs GameObjects , chaque GameObject possèdera SA propre variable « energie » qui sera totalement indépendante des autres. Rappel : Pour accéder ou modifier une variable publique à par r d’un autre script → GameObject. Find («
NomduGameObject » ). GetComponent (n
omDuScript ).variable; //Par exemple, pour ajouter 5 à la variable temps qui se trouve dans le script script_compteur du gameObject compteur . GameObject. Find (" compteur" ). GetComponent (script_compteur).temps+= 5; var autreObjet : GameObject ; //il faudra définir ce e variable dans l'inspecteur autreObjet. GetComponent (script_compteur).temps+= 5; Note importante : La commande Find() ne fonc onnera pas si le gameObject est désac vé. Il faudra alors garder une référence à ce gameObject dans une variable de type GameObject. © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Variables privées (private var) Semblables aux variables publiques en ce sens qu’il s’agit des variables de membre (« member variables » ) ce qui signifie que chaque instance du script possède une variable qui lui est propre. À la différence des variables publiques, les variables privées ne sont pas visibles à l’extérieur du script, ni dans l’inspecteur de Unity. Contrairement aux variables locales, les variables privées sont accessibles dans toutes les fonc ons du script. Exemple : // déclara on et ini alisa on de la variable privée energie private var energie:int; func on S tart (){ energie = 10 ; } func on D
ommage (){ energie‐‐; } ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Variables locales Une variable locale est une variable déclarée à l’intérieur d’une fonc on. Elle ne sera accessible que dans ce e fonc on. // variable locale i func on decrescendo() { for ( var i:int = 999 ; i > ‐ 1; i‐‐) { GetComponent(AudioSource).volume = i * . 001 ; yield WaitForSeconds( 0.01 ); } } ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Variables globales (sta c var) Contrairement aux variables publiques, les variables globales ou « sta c var » ne sont pas instanciées lorsque le script est associé à un GameObject . La variable globale appar ent plutôt à la classe, c’est‐à‐dire au script original qui se trouve l’onglet project de Unity. Si le script est u lisé sur plus d’un GameObject (plusieurs instances du script), la variable sta que aura la même valeur pour tous. Dès qu’une modifica on est faite à la variable sta que, elle change pour tous puisqu’il s’agit d’une variable globale unique. © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Note importante : Les variables sta ques restent en mémoire d’une scène à l’autre. // Script portant le nom : Variables_globales // Ini alisa on de la variable globale pointage. Pour que le script s'exécute une fois, il a été a aché au gameObject vide "Ini alisa on" qui est présent seulement dans la scène de lancement. Par la suite et dans toutes les autres scènes, il sera possible d'accéder à la variable pointage en u lisant la commande : Variables_globales.pointage sta c var pointage : float ; func on S tart () { pointage= 0; } Pour accéder à une variable sta que, il suffit de passer par le nom du script (la classe) qui se trouve dans l’onglet project de Unity. → Nom_du_script.nom_de_la_variable_sta c → ex : Variables_globales.pointage /* ‐‐ Scène Finale, affichage d'un message en fonc on du pointage obtenu ‐‐ Script associé au gameObject "conclusion" qui possède une composante UI.text Récupéra on de la variable globale pointage qui est analysée. Affichage textuel d'un message en fonc on de la valeur de la variable */ func on S tart (){ if (Variables_globales.pointage == 10 ){ var messageFinal = "Bravo, c'est super mon champion!!!" ; } else i f (Variables_globales.pointage < 0) { messageFinal = "C'est vraiment pas fort ton affaire!" ; } else { messageFinal = "Ouin, tu peux surement faire mieux la prochaine fois!" ; } messageFinal += ( « \n \n Voici ton pointage final : " + Variables_globales.pointage); GetComponent(UI.Text).text = messageFinal; } © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Ges on de scènes mul ples Dans Unity, il est possible et souhaitable de travailler en u lisant plusieurs scènes. Un exemple simple pourrait être l’u lisa on d’une scène d’introduc on, suivi d’une scène menu, d’une scène jeu et finalement d’une scène de conclusion. L’u lisa on des scènes permet une scénarisa on plus efficace et moins complexe en plus d’assurer une bonne ges on de la mémoire de l’ordinateur. En effet, lorsqu’on qui e une scène pour se diriger dans une nouvelle, la première scène est purgée de la mémoire. Notez cependant que les variables sta ques sont conservées en mémoire lors des changements de scène . Par ailleurs, il est possible de conserver un GameObject lors d’un changement de scène en u lisant la commande DontDestroyOnLoad() . (voir plus bas) Chaque scène possède sa propre structure et ses propres GameObjects . Pour créer une nouvelle scène : menu File → New Scene Avant de pouvoir faire des changements de scènes, il faut s’assurer que toutes les scènes nécessaires ont été ajoutées dans le projet : menu File à Build Se ngs… ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Changement de scène SceneManager.LoadScene("nom de la scène") ou SceneManager.LoadScene(index de la scène) Pour u liser la classe SceneManager , il est obligatoire de l'importer dans le haut du script (juste après le #pragma strict ) : i mport UnityEngine.SceneManagement; Pour que les scènes puissent être chargées, elles doivent avoir été ajoutées dans la fenêtre " scenes in build " accessible dans le menu : file‐‐>build se ngs L'index d'une scène (son numéro) correspond à l'ordre dans lequel la scène a été placée dans la fenêtre " build se ngs". Exemple #pragma strict import UnityEngine.SceneManagement; // Nécessaire. Doit être placé avant la déclara on des // variables func on Start () { SceneManager.LoadScene( "Jeu" ); // Chargement de la scène "jeu" SceneManager.LoadScene( 1) ; // Chargemetn de la scène 1 } © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média DontDestroyOnLoad(Object); Commande indiquant à Unity de ne pas supprimer l’objet lors d’un changement de scène. Notez que toute la hiérarchie de l’objet sera également préservée. // Lors du lancement, on indique à Unity que le GameObject sur lequel se trouve ce script doit être conservé lors des changements de scène. func on S tart () { DontDestroyOnLoad (gameObject); } ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Consignes pour l'exercice (suite du projet " SurvieShooter" ) Scène d'introduc on Créez une scène d'introduc on semblable à celle du démo. L'image de fond et la police de caractères u lisée pour le texte sont disponibles sur le site du cours. L'image de fond (UI de type image) doit recouvrir l'ensemble de la scène. Lorsqu'on appuie sur la barre d'espacement, la scène principale doit être chargée. Musique La musique du jeu doit commencer dès la scène d'introduc on et con nuer dans la scène principale et dans la scène finale. La lecture de la musique ne doit pas être interrompue lors du changement de scène. Pour y arriver, vous aurez besoin de la commande DontDestroyOnLoad pour que le gameObject qui joue la musique soit préservé d'une scène à l'autre. Pointage Dans la scène principale (le jeu!), il faut maintenant compter et afficher les points. Chaque monstre tué doit faire augmenter le pointage (Hellephant = 20 points, ZomBunny = 10 points et ZomBear = 5 points) Le pointage doit être conservé dans une variable sta que puisque vous en aurez besoin dans la scène finale. Affichez le pointage dans une zone de texte (UI texte), de façon semblable au démo. Mort du personnage et scène finale Créez d'abord une scène finale semblable à celle du démo. Lorsque le joueur est touché par un ennemi, la scène finale doit être chargée. La scène finale doit présenter au joueur le pointage qu'il a réalisé. Lorsqu'on appuie sur la barre d'espacement, la scène du jeu doit être chargée et le pointage doit être réini alisé. © Mathieu Dionne et Vahik Toroussian, Hiver 2016