Tip:
Highlight text to annotate it
X
Bonjour à tous!
Je suis Guillaume Côté
Ceci est la première partie de mon premier tutoriel intitulé "Mon premier jeu avec Blender"
Dans lequel je vais vous montrer comment créer votre premier jeu avec le Blender Game Engine (BGE)
Il s'agira d'un jeu tout simple mais vous verrez que nous apprendrons tout plein en chemin.
Alors, commençons
en jetant un oeil au résultat final où nous arriverons.
Après avoir appuyé sur 'p' pour lancer le BGE
vous pouvez voir que je peux choisir entre 'Play' et 'Quit'
et que les options grossissent lorsque le pointeur de la souris les survole.
Si je clique sur 'Play' je peux lancer le jeu
Je peux me déplacer.
Je peux ramasser des pièces.
et on voit un compteur de pièces ici
Si je touche à un ennemi
l'écran devient flou
et je perd une vie
mon perso se met à clignoter
Si je ramasse cette clé
elle disparaît
pour réapparaître ici.
Il y a aussi une minuterie
qui décompte le temps alloué
et si elle atteint zéro
ou si mes vies atteignent zéro
l'écran 'Game Over' apparaîtra.
Si je touche aux barres de métal
alors que j'ai la clé
elles se relèvent
et je peux toucher à l'étoile
ce qui complète le niveau.
J'ai alors un choix entre rejouer ou quitter la partie.
et je choisis de quitter en appuyant sur 'Enter'.
Voilà donc le jeu que nous allons créer.
Aujourd'hui nous aborderons les déplacements de perso
mais au fil des vidéos vous apprendrez à créer tout ce que vous avez vu dans ce jeu.
sauf la modélisation et l'animation
car je veux que cette série se concentre sur la logique de jeu.
Cependant, je vais placer des liens dans la description des vidéos (sur Youtube)
pour vous familiariser avec ces techniques si vous ne les maîtrisez pas déjà.
et il y aura aussi un lien pour télécharger la scène de départ que nous utiliserons.
Puisqu'on en parle, passons à Blender et mettons-nous à l'oeuvre.
Voici donc la scène de départ
qui ne contient rien d'autre que les maillages des objets
qui n'ont ni matériaux, ni propriétés et qui n'ont même pas été renommés.
La première chose que je veux faire est aller à l'écran de logique de jeu
et le moyen le plus rapide pour cela
(petit problème)
On passe à l'écran avec le raccouci Ctrl+flèche à droite.
Je ferme l'Outliner
et l'éditeur de texte dont je n'aurai pas besoin.
Mon but est de faire avancer le perso si j'appuie sur la touche 'd'
et le faire reculer en appuyant sur la touche 'a'.
Mais d'abord je dois régler quelques petit problèmes
Car si je place ainsi le perso en l'air
et que j'appuie sur 'p' pour lancer le BGE
vous pouvez voir que l'éclairage tombe à plat
et aussi que le perso flotte.
Pour régler le premier problème je clique sur ce bouton et choisis 'Textured'
Il nous faudra aussi ajouter de l'éclairage alors j'appuie sur Maj+a
et je choisis 'Lamp', 'Point'.
Je déplace la lampe ici
afin d'obtenir un éclairage de base.
Pour que le perso ne flotte plus
je passe au contexte 'Physics' dans l'éditeur de propriétés
pour y changer ses propriétés physiques.
Je ne peux le faire tout de suite parce que
nous utilisons le moteur de rendu par défaut de Blender
alors qu'il nous faudrait utiliser le moteur de rendu du BGE.
Dès lors, un paquet de nouveaux choix apparaissent
parmi lesquels je peux faire passer le 'type physique' de mon objet
de 'Static' à 'Dynamic'.
Désormais, si j'appuie sur 'p' on voit que le perso tombe
mais aussi qu'il s'enfonce dans le sol.
Il existe un moyen rapide d'empêcher cela
en cochant la boîte 'Collision Bounds' ici.
Je ne change rien aux réglages par défaut
et ce que j'obtiens est une 'boîte de collision' invisible qui entoure le perso
qui l'empêchera de s'enfoncer dans le sol.
Maintenant que tout est réglé
nous pouvons penser à la façon de faire se déplacer notre perso.
On peut y arriver de bien des manières
mais nous allons utiliser les 'Logic Bricks' (brique logiques).
Qu'est-ce que ces briques logiques et comment fonctionnent-elle ?
Les briques logiques sont un outil de scriptage visuel.
C'est là une façon sophistiquée de dire qu'il s'agit d'un moyen de programmer votre jeu
de faire fonctionner la logique de jeu
de décider de quoi agira sur quoi et comment
sans devoir écrire du code.
La façon de procéder est en ajoutant un 'Sensor'
qui réagira lorsqu'un certain événement se produira.
et un 'Actuator' qui produira un effet en réponse.
Les deux seront reliés par un 'Controller' qui...
...enfin, c'est un peu compliqué: nous y reviendrons plus ***.
Comme je vous l'ai dit, je veux que mon perso avance lorsqu'on appuie sur la touche 'd'.
Puisqu'il s'agit d'une touche du clavier je choisis un Sensor du type 'Keyboard'
Ce type de Sensor comporte beaucoup d'options
mais la seule dont nous nous soucierons est à la case à gauche du mot 'Key'.
Si vous clique dans cette case Blender vous demandera d'appuyer sur une touche
J'entre 'd'
Ainsi, à chaque fois que j'appuirai sur la touche 'd', ce Sensor deviendra 'True' (vrai)
ce qui fera entrer en action l'Actuator qui lui sera relié.
Parlant d'Actuator, j'en veux un qui déplacera mon perso. L'Actuator 'Motion' fera l'affaire.
Afin que mon Sensor 'Keyboard' puisse activer mon Actuator 'Motion'
Je dois cliquer sur le point à la droite du Sensor et glisser jusqu'à la balle à la gauche de l'Acuator.
Un Controller apparaît automatiquement.
dont nous ne changerons pas les valeurs par défaut.
Oh, j'ai complètement oublié de vous dire
que les briques logique que nous réglons maintenant n'affecteront que l'objet en sélection.
Présentement c'est mon perso qui est sous sélection
Si je sélectionne autre chose vous voyez que les briques logiques disparaissent.
Cela signifie que nous devrons régler des briques logiques
pour chaque objet qui interviendra dans le jeu.
Pour le moment il suffit de s'assurer que le perso est sélectionné avant de régler ses briques logiques.
L'Actuator 'Motion' comporte tout un lot d'options pour faire bouger le perso.
Si vous n'en voyez que peu, c'est sans doute que votre perso est encore du type 'Static'
alors assurez-vous qu'il devient du type 'Dynamic'
J'ai testé toutes ces options
La 'Location', la 'Force', la 'Linear Velocity' (vitesse linéaire)
...le Servo Control. J'ai même essayé de coder les déplacements en Python.
Et ce qui me semble le plus adapté est le Servo Control.
Je veux quand même vous montrer comment les autres possibilités fonctionnent.
afin que vous voyez comment et que vous compreniez pourquoi nous ne les utiliserons pas.
Voyons d'abord l'option 'Location'.
Les glissières ici, que j'appelle ainsi parce qu'on peut glisser la souris dessus pour changer leur valeur
alors que j'appelle ceci une liste déroulante
et ceci boîte à cocher.
Donc les glissières ici
vont modifier la location de votre perso
à chaque frame où votre Sensor sera 'True'.
Puisqu'il y a 60 frames par seconde
vous aurez l'impression que votre perso avance.
'Location' fonctionne très bien
est facile à régler
mais le problème survient au moment des collisions contre un mur.
Au lien de simplement se cogner au mur, le perso le pénètre
parce que votre perso avance sur une distance immuable à chaque frame.
Alors, à un moment donné, ce déplacement fixe risque de l'enfoncer à l'intérieur du mur.
Cela est très mauvais: puisque votre perso est de type 'Dynamic'
le mur va le repousser
et vous n'aurai ni force ni vitesse pour contrer la force appliquée par le mur.
Le résultat sera un jeu au comportement bizarre.
C'est la raison pour laquelle nous n'utiliserons pas l'option 'Location'.
Qu'en est-il de l'option 'Force'?
'Force' fonctionne en donnant au perso un impulsion à chaque frame tant que le Sensor est 'True' (NdeT: nous dirons 'positif')
ce qui augmentera la vitesse avec le temps.
Une belle accélération est très appréciable
de même qu'une belle décélération
et aussi de belles collisions avec les murs
mais il reste un gros problème
c'est que l'accélération peut se poursuivre indéfiniment.
Tant que votre joueur enfonce la touche 'd'
la vitesse du perso augmentera
ce qui est évidemment mauvais.
et nous pourrions arranger cela en imposant une vitesse maximale
en se rendant dans le contexte 'Physics'
et ici, sous 'Velocity' inscrire un maximum de, disons, 5.
Désormais le perso ne pourra excéder la vitesse de 5.
Mais cette solution entraîne un autre problème
Comment fera-t-on courir le perso ?
Comment le fera-t-on tomber?
car, puisqu'il n'existe qu'une vitesse maximale pour tout
cela semblera incorrect et certains mouvements seront impossibles.
et c'est la raison pour laquelle nous ne pouvons utiliser ceci.
Nous ne pouvons utiliser 'Force' non plus.
Il nous reste 'Linear Velocity'
Si vous vous demandez ce qu'est la vélocité
c'est un terme passablement équivalent à 'vitesse'.
Il y a deux façons d'utiliser 'Linear Velocity'
'Set' ou 'Add'
Pour l'utiliser en mode 'Add' il faut activer ce bouton.
Il en résultera un ajout de vitesse à chaque frame à la vitesse à ce moment
ce qui produira un effet très similaire à 'Force'
et donc nous retrouverons le même problème qu'avec 'Force'
Donc nous ne pouvons utiliser le mode 'Add'.
Qu'en est-il du mode 'Set'?
La façon dont le mode 'Set' fonctionne
est en maintenant la vitesse choisie tant que le Sensor est positif.
ce qui cause un problème intéressant
que je vais vous montrer dans une seconde
Laissez-moi juste placer ces objets plus haut
pour les mettre hors du chemin
et je vais régler la vélocité à 5 dans le sens des X
car c'est la direction dans laquelle je veux que mon perso se déplace.
Si j'appuie sur 'p' pour lancer le jeu
puis 'd' pour faire avancer le perso
vous voyez qu'il ne tombe pas.
Pourquoi?
Il arrive que, bien sûr, notre vitesse en X est de 5
et c'est bien ce que nous voulons
mais nous imposons aussi, à chaque frame, une vitesse en Z de zéro
qui contrecarre l'effet de la gravité à chaque frame.
C'est un sérieux problème qui nous interdit d'utiliser 'Linear Velocity'.
Nous n'avons donc plus que Servo Control comme choix
à moins de se mettre à coder
On trouve 'Servo Control' parmi les choix qu'offre ce menu déroulant.
Un tout nouveau jeu d'options est affiché.
Servo Control peut intimider au début
mais lorsqu'on le connaît c'est vraiment très simple et puissant.
Alors, laissez-moi vous expliquer simplement comment on l'utilise.
Ces glissière déterminent la vitesse visée
Blender essayera de donner à votre perso cette vitesse.
Ces boutons indiquent à Blender quelle valeurs il peut manipuler.
Si, par exemple, je coche ce bouton
pour dire à Blender qu'il ne peut utiliser que des valeurs limitées
vous pouvez voir que nous pouvons maintenant déterminer un 'Max' et un 'Min'
qui indiquent à Blender les forces maximales et minimales autorisées
afin de propulser le perso jusqu'à la vitesse-cible.
Pour faire simple
imaginez que notre perso est un vaisseau spatial
ici, nous avons sa vitesse maximale
et ceci devient sa force d'accélération.
Donc, plus ces nombres sont élevés
plus vite notre perso pourra aller
et plus élevés seront ces nombres
plus vite le perso atteindra sa vitesse maximale.
Ceci résume passablement ce qu'est Servo Control.
Il existe certainement bien d'autres options
mais nous n'y toucherons pas puisque les valeurs par défaut conviennent très bien.
J'ai trouvé qu'une valeur de 5 pour la vitesse est bonne
et une accélération de 7.5 aussi.
Je veux aussi limiter la force à zéro dans le sens des Z.
car je ne veux pas que Blender influence la vitesse en Z.
Cependant je vais laisser l'accélération en Y telle quelle
car je ne veux pas que mon perso puisse se déplacer dans le sens des Y.
Maintenant je vais procéder au réglages des déplacement inverses.
J'ajoute un Sensor
de type 'Keyboard'
je choisis la touche 'a'
J'ajoute un Actuator
de type 'Motion'
de type 'Servo Control'
Vélocité linéaire de -5
car nous voulons aller dans la direction opposée.
Je limite la Force à Max=0, Min=7.5
Oh, je dois aussi cocher le bouton 'Z'.
Maintenant, si j'appuie sur 'p'
vous pouvez voir que nous obtenons une belle accélération
une belle décélération
Oh, un problème !...
J'ai complètement oublié
Je dois relier ce Sensor 'Keyboard' à cet Actuator 'Motion'.
Si je ne le fais pas ça ne fonctionnera pas. :D
OK donc nous obtenons cette belle accélération
cette belle décélération
et de bonnes collisions.
Voilà comment on règle les déplacement d'un perso
avec le Blender Game Engine.
Cela conclut aussi le tutoriel d'aujourd'hui.
J'espère que vous avez aimé
et que vous en avez appris quelque chose.
Si vous découvrez quoi que ce soit qui pourrait être amélioré dans ce tutoriel
s.v.p. laissez un commentaire
et je m'efforcerai de rendre le prochain meilleur.
Je vous souhaite une belle journée
et je vous donne rendez-vous pour la partie 2 de ce tutoriel.