Return to Video

Quiz Game - Data Classes [2/8] Live 2016/10/31

  • 0:02 - 0:03
    Continuons.
  • 0:04 - 0:06
    La prochaine étape est
  • 0:06 - 0:08
    d'écrire notre classe
    pour le script «AnswerData»
  • 0:09 - 0:12
    elle y contiendra les données
    de toutes nos réponses.
  • 0:13 - 0:15
    Double-cliquez,
    le script s'ouvre.
  • 0:16 - 0:20
    Et pour ce script j'utiliserez
    "MonoDevelop".
  • 0:21 - 0:22
    Puis je cite mes notes ici
  • 0:22 - 0:25
    Maximisons l'espace de la fenêtre...
  • 0:25 - 0:26
    Nous verrons mieux à l'écran
  • 0:27 - 0:27
    Ok.
  • 0:28 - 0:28
    Donc,
  • 0:28 - 0:30
    Nous allons créer une série
  • 0:30 - 0:32
    de petites classes
    qui ne sont pas de type
    «MonoBehaviour»
  • 0:33 - 0:35
    Il s'agira de pures
    classes c#
  • 0:36 - 0:40
    Et elles utiliseront:
    "[System.Serializable]"
  • 0:40 - 0:41
    En fait,
  • 0:41 - 0:42
    La raison pour laquelle nous
  • 0:42 - 0:43
    utilisons ceci,
  • 0:43 - 0:45
    est pour que nous puissions
    les modifier
  • 0:45 - 0:46
    et détruire leurs valeurs
  • 0:46 - 0:47
    en utilisant "l'inspector"
  • 0:48 - 0:49
    dans l'éditeur «Unity».
    ("Unity Editor")
  • 0:49 - 0:51
    Alors, elles n'utiliseront pas
  • 0:51 - 0:52
    de fonctions
  • 0:52 - 0:54
    Nous allons donc supprimer
    "Start" et "Update puis
  • 0:54 - 0:57
    cette classe contiendra uniquement
    que deux variables.
  • 0:57 - 1:00
    D'abord, nous aurons besoin
    d'un "Public string"
  • 1:00 - 1:01
    que nous nommerons:
    «answerText»
  • 1:01 - 1:05
    Ce sera le "string" qui contiendra
    le texte de notre réponse.
  • 1:05 - 1:09
    Qu'il s'agisse de:
    Oui, Non, Vrai, Faux, etc
  • 1:09 - 1:12
    Ensuite nous écrirons un
    "public boolean"
  • 1:12 - 1:14
    que nous appelons:
    "isCorrect".
  • 1:14 - 1:16
    Et ceci contiendra
    l'information de la réponse
  • 1:16 - 1:20
    si elle est réponse est bonne ou non
    ainsi que la question elle-même.
  • 1:20 - 1:23
    C'est tout ce dont nous aurons
  • 1:23 - 1:24
    besoin pour cette classe,
  • 1:24 - 1:26
    donc fermons cette dernière.
  • 1:26 - 1:27
    Retournons à «Unity»
  • 1:27 - 1:28
    Et nous allons créer notre
  • 1:28 - 1:29
    prochaine classe
  • 1:29 - 1:30
    qui sera
  • 1:30 - 1:32
    note classe nommée:
    «QuestionData».
  • 1:33 - 1:36
    Allons créer un nouveau
    C# Script et nommons-le
  • 1:37 - 1:38
    «QuestionData»
  • 1:39 - 1:41
    Ce script servira d'éditeur
  • 1:41 - 1:44
    Encore une fois,
    Ce ne sera pas de type «MonoBehaviour»
  • 1:44 - 1:46
    Nous n'utiliserons donc pas
    «Start» ni «Update».
  • 1:46 - 1:49
    Mais nous utiliserons:
  • 1:49 - 1:53
    "[System.Serializable]"
  • 1:53 - 1:54
    Dans «QuestionData»,
  • 1:55 - 1:56
    nous aurons besoin d'un
    "public string"
  • 1:57 - 1:59
    pour notre "questionText"
    (le texte de notre queston)
  • 1:59 - 2:02
    et nous utiliserons un
    "public array"
  • 2:02 - 2:04
    contenant notre «AnswerData»
  • 2:04 - 2:05
    appelé: «answers».
  • 2:06 - 2:07
    Donc, chaque question
  • 2:07 - 2:09
    contiendra un nombre de réponses
  • 2:09 - 2:12
    que nous associerons a celles-ci,
  • 2:12 - 2:16
    elles seront gardées dans nos classes: «AnswerData»
    que nous venons tout juste de créer.
  • 2:16 - 2:19
    Et chaque tour ("Round")
  • 2:19 - 2:21
    contiendra une série de questions.
  • 2:21 - 2:24
    Donc, la prochaine "classe"
    que nous allons créer
  • 2:24 - 2:26
    Retournons à «Unity»
  • 2:26 - 2:28
    Créer un script C#
  • 2:28 - 2:29
    Celui-ci sera nommé:
  • 2:29 - 2:32
    «RoundData».
  • 2:32 - 2:35
    Et tel que «QuestionData» et «AnswerData»,
  • 2:35 - 2:42
    ce script sera lui aussi "Serializable"
  • 2:42 - 2:43
    Ne sera pas non plus
    de type «MonoBehaviour»
  • 2:43 - 2:46
    Donc n'utilisera pas les fonctions
    «Start» et «Update»,
  • 2:46 - 2:49
    et celui-ci contiendra quatre variables.
  • 2:49 - 2:52
    Le premier est un "string"
    que nous nommons:
  • 2:52 - 2:55
    «name», pour le nom de notre "Round",
  • 2:55 - 2:58
    Le second sera un "integer",
    que nous appelons:
  • 2:58 - 3:00
    «timeLimitInSeconds»
  • 3:00 - 3:05
    Donc, combien de secondes données
    aura le joueur pour terminer ce "Round";
  • 3:05 - 3:07
    Le troisième sera un "public int"
  • 3:07 - 3:14
    appelé: "pointsAddedForCorrectAnswers"
    (points gagnés pour bonnes réponses)
  • 3:14 - 3:19
    Ceci servira à calculer combien de points
    vous obtiendrai par bonnes réponses.
  • 3:19 - 3:20
    Finallement,
  • 3:20 - 3:21
    Nous aurons besoin d'un autre
  • 3:21 - 3:24
    "public «Array» de type "QuestionData"
    ("public QuestionData[] question;")
  • 3:24 - 3:26
    appelé: «questions».
  • 3:26 - 3:30
    Donc, chaque "Round" contiendra un certain
    nombre de questions,
  • 3:30 - 3:32
    puis chaque question contiendra un certain
    nombre de réponses.
  • 3:32 - 3:36
    en utilisant ces variables
    de type «public "arrays" [ ] »
  • 3:36 - 3:39
    Enregistrons le tout.
  • 3:39 - 3:42
    Puis maintenant,
  • 3:42 - 3:48
    Nous pouvons revenir et remplir notre
    classe «DataController» qui devra gérer
  • 3:48 - 3:50
    toutes ces données.
  • 3:50 - 3:52
    Alors, ouvrons ce dernier..
  • 3:52 - 3:54
    Et celui-ci, cette fois
  • 3:54 - 3:55
    s'agira d'un script de type "MonoBehaviour"
  • 3:55 - 3:57
    puisqu'il est attaché à notre
  • 3:57 - 4:05
    "DataController GameObject" et celui-ci
    devra utiliser
  • 4:05 - 4:08
    "UnityEngine.SceneManagement".
  • 4:08 - 4:11
    C'est pourquoi nous devons écrire
    Ici-haut dans le script:
  • 4:11 - 4:13
    « using UnityEngine.SceneManagement; »
  • 4:13 - 4:16
    pour qu'ainsi, nous puissions
    charger nos scènes dans notre jeu.
  • 4:17 - 4:22
    Par la suite,
    Nous ajouterons
  • 4:22 - 4:27
    un "public «Array» ( [ ] )
    de type "RoundData",
  • 4:27 - 4:31
    que nous nommons:
    " public RoundData [ ] allRoundData; "
  • 4:31 - 4:33
    Donc, un peu plus tard,
  • 4:33 - 4:35
    nous pourrons rallonger le jeu
    Et y insérer plusieurs autres «Round»,
  • 4:35 - 4:38
    Mais pour l'instant nous n'en aurons
    qu'un seul et unique.
  • 4:38 - 4:40
    Mais nous l'inscrirons ici avec un «array» [ ]
  • 4:40 - 4:43
    pour que nous puissions le rallonger
    un peu plus tard dans cette session.
  • 4:43 - 4:49
    Ensuite, nous allons
    configurer ce "GameObject"
  • 4:49 - 4:50
    pour qu'il ne se détruise pas
    au chargement de notre jeu.
  • 4:50 - 4:51
    (DontDestroyOnLoad)
  • 4:51 - 4:53
    Nous allons donc faire appel
    a la fonction "DontDestroyOnLoad"
  • 4:53 - 4:56
    Et poursuivre vers le "GameObject"
  • 4:56 - 4:57
    dont le script y est attaché.
  • 4:57 - 4:59
    Ce dont cela signifie,
  • 4:59 - 5:01
    est que normalement lorsque nous
    chargeons une nouvelle scène,
  • 5:01 - 5:03
    chaque objet dans les scènes précédentes
  • 5:03 - 5:05
    qui ne sont plus activées, sont détruites.
  • 5:05 - 5:09
    En configurant cet objet avec
    «DontDestroyOnLoad»
  • 5:09 - 5:12
    lorsque nous ouvrons une nouvelle scène,
    rien ne se détruit dans la scène.
  • 5:12 - 5:14
    La façon de le voir par l'interface de Unity,
  • 5:14 - 5:17
    c'est en observant le seul objet qui
    se divise dans le jeu et qui reviendra
  • 5:17 - 5:21
    chaque fois sous le nom de:
    «DontDestroyOnLoad» ;
  • 5:21 - 5:25
    Alors, dans notre cas,
    Configurons ceci avec «DontDestroyOnLoad»
  • 5:25 - 5:27
    Et ensuite nous allons écrire:
  • 5:27 - 5:31
    SceneManagement.LoadScene
  • 5:31 - 5:36
    puis nous allons charger le MenuScreen.
  • 5:36 - 5:38
    Maintenant,
  • 5:38 - 5:40
    La raison principale de ce script «DataController»,
  • 5:40 - 5:46
    est d'alimenter «RoundData» à notre «GameController»
    Lorsque nous arriverons à cette scène
  • 5:46 - 5:51
    Nous allons donc déclarer une fonction «public»
    Pour retourner un objet de type «RoundData»
  • 5:51 - 5:58
    que nous nommons: «GetCurrentRoundData».
  • 5:58 - 6:06
    Et dans ce cas nous allons écrire:
    «return allRoundData [0]»
  • 6:06 - 6:10
    Dans ce cas nous savons que nous aurons
    qu'uniquement «data» à notre roundData "0"
  • 6:10 - 6:13
    dans notre RoundData "0"
  • 6:13 - 6:19
    Mais si nous voulons élargir le tout
    un peu plus tard, nous pourrions
  • 6:19 - 6:23
    créer un «int», pour spécifier
    quelle donnée nous voulons retourner, etc.
  • 6:23 - 6:24
    Ok.
  • 6:24 - 6:30
    C'est tous ce que nous aurons
    besoin pour l'instant, enregistrons le tout.
  • 6:30 - 6:31
    Retournons à Unity.
  • 6:32 - 6:33
    Et maintenant,
  • 6:34 - 6:38
    Avant de pouvoir charger une des scènes
    que nous venons de créer,
  • 6:38 - 6:39
    Nous avons besoin de les ajouter
    dans notre «Build Settings»
  • 6:40 - 6:43
    Donc, allons à «File» et «Build Settings»
  • 6:43 - 6:45
    Glissons d'abord notre scène
    nommée: «Persistent»
  • 6:45 - 6:49
    Notre scène nommée «Persistent»,
    sera celle qui sera chargée au départ
  • 6:49 - 6:51
    lorsque nous démarrerons notre application
  • 6:51 - 6:58
    et nous mènera directement
    à notre scène «MenuScreen».
  • 6:58 - 7:00
    Lorsque le joueur joueras plusieurs
    "Round" de notre jeu,
  • 7:00 - 7:03
    Il sera toujours automatiquement retourné
    à notre scène «MenuScreen»
  • 7:03 - 7:05
    La scène «Persistent» sera toujours chargée
  • 7:05 - 7:08
    la première fois, lorsque le jeu démarrera,
  • 7:08 - 7:21
    Ensuite notre DataController gardera
    la donnée en mémoire et ne sera pas détruite
  • 7:21 - 7:23
    Donc,
  • 7:23 - 7:25
    Nous allons ajouter la scène «Persistent»,
  • 7:25 - 7:27
    Ensuite, la scène «MenuScreen»
  • 7:27 - 7:29
    Et enfin, la scène «Game».
  • 7:29 - 7:30
    Ok.
  • 7:30 - 7:32
    Donc, maintenant elles sont disponibles
  • 7:32 - 7:33
    Les scènes peuvent être chargées.
  • 7:33 - 7:37
    Et on peut
  • 7:37 - 7:39
    Enregistrer notre «DataController»
  • 7:39 - 7:41
    Jouer.
  • 7:41 - 7:46
    Et
  • 7:47 - 7:50
    Ok, ça fonctionne.
  • 7:50 - 7:52
    Elles sont trop pareilles
  • 7:52 - 7:55
    Mettons l'arrière-plan de la
    «Main Camera» noir
  • 7:55 - 7:56
    dans la scène «Menu Screen»
    pour que vous puissiez voir
  • 7:56 - 7:59
    comme il faut ce qui se passe
    dans la scène.
  • 7:59 - 8:00
    Donc voilà, on commence ici,
  • 8:00 - 8:01
    Il n'y a aucune caméra
    et ça nous amène à
  • 8:01 - 8:02
    une scène noire,
    n'est-ce pas?
  • 8:02 - 8:05
    Donc,
    Ça fonctionne tel que prévu.
  • 8:05 - 8:06
    Immédiatement,
  • 8:06 - 8:08
    la scène «MenuScreen» démarre
  • 8:08 - 8:13
    Et maintenant, notre «DataController»
    enclenche cette scène «DontDestroyOnLoad»
  • 8:14 - 8:16
    Dont laquelle elle ne sera pas détruite.
  • 8:16 - 8:18
    Alors, tout fonctionne tel que prévu.
  • 8:18 - 8:20
    Donc, je vais jeter un coup d’œil
    rapide sur la "chat",
  • 8:20 - 8:25
    Et voyons voir,
    si tout le monde se porte bien.
Title:
Quiz Game - Data Classes [2/8] Live 2016/10/31
Description:

Watch this video in context on the official Unity learn pages -
http://www.unity3d.com/learn/tutorials/topics/scripting/data-classes

In this live training session we will look at creating a multiple choice quiz game. We will create the core game loop - timer, score, win and lose states. We will also show code architecture best practices - keeping data and logic separate, and how to structure a game in a way that makes it easy to maintain and extend. We will look at some of the ways we can extend this in session two.

more » « less
Video Language:
English
Duration:
08:27

English subtitles

Revisions