Vous êtes sur la page 1sur 101

customer 507877 at 2016-01-21

507877 23:38:34 +0100


Crez des jeux de A Z
avec Unity
III. Concevoir un jeu 2D

par
Anthony Cardinale

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Aperu gnral de l'ouvrage

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity - III. Concevoir un jeu 2D
parAnthony Cardinale

ISBN (PDF) : 978-2-8227-0401-4

Copyright 2015 ditions D-BookeR


Tous droits rservs

Conformment au Code de la proprit intellectuelle, seules les copies ou reproductions


strictement rserves l'usage priv du copiste et non destines une utilisation
collective ainsi que les analyses et les courtes citations dans un but d'exemple et
d'illustration sont autorises. Tout autre reprsentation ou reproduction, qu'elle soit
intgrale ou partielle, requiert expressment le consentement de l'diteur (art L 122-4,
L 122-5 2 et 3a).

Publi par les ditions D-BookeR, 5 rue Delouvain, 75019 Paris


www.d-booker.fr
contact@d-booker.fr

Ce module fait partie de l'ouvrage global intitul: Crez des jeux de A Z avecUnity
ISBN (HTML) : 978-2-8227-0404-5

Les exemples (tlchargeables ou non), sauf indication contraire, sont proprit des
auteurs.

Mise en page: gnre sous Calenco avec des XSLT dveloppes par la socit
NeoDoc (www.neodoc.biz)

Date de publication: 29/10/2015


dition: 1
Version: 1

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Table des matires
propos de l'auteur .............................................................................. vii
Introduction .......................................................................................... 1
1. Qu'allez-vous apprendre dans ce livre?........................................... 1
2. Ce dont vous avez besoin ............................................................. 3
3. URL raccourcies .......................................................................... 3
1. Level design ..................................................................................... 4
1.1. Prparation du projet ................................................................. 4
1.2. Conception du niveau ................................................................ 6
1.3. Ajout du personnage joueur ...................................................... 12
2. Cration dun plug-in ....................................................................... 15
2.1. Prsentation gnrale de notre plug-in .......................................... 15
2.2. Cration du script de la grille .................................................... 16
2.3. Cration des fonctions du plug-in ................................................ 19
3. Programmation du joueur etdelarme.............................................. 25
3.1. Programmation des mouvements du joueur .................................... 25
3.2. Programmation du saut ............................................................ 27
3.3. Cration du viseur et de larme .................................................. 30
3.4. Gestion des impacts des projectiles ............................................. 36
4. Barre de vie et effets ...................................................................... 38
4.1. Cration de la barre de vie ....................................................... 38
4.2. Cration du script de vie .......................................................... 39
4.3. Gestion des collisions .............................................................. 42
4.4. Effets lumineux sur le projectile .................................................. 44
4.5. Effets sonores ......................................................................... 45
5. Quelques objets bonus .................................................................... 48
5.1. Cration des prefabs ............................................................... 48
5.2. Programmer linstanciation des objets .......................................... 49
5.3. Programmation des collisions ..................................................... 52
6. Dcouverte de iTween ..................................................................... 55
6.1. Comment fonctionne iTween? .................................................... 55
6.2. Transition sur la couleur ............................................................ 56
6.3. Regarder un GameObject ........................................................ 58
6.4. Dplacer un GameObject ......................................................... 58

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

6.5. Un coup de punch! ................................................................ 58


6.6. Appliquer une rotation ............................................................. 59
6.7. Modifier la taille ..................................................................... 59
6.8. Pour aller plus loin .................................................................. 59
7. Ajout des ennemis ........................................................................... 61
7.1. Ajout d'un ennemi .................................................................... 61
7.2. Cration du script de l'ennemi .................................................... 62
7.3. Dernires retouches ................................................................. 64
8. Utilisation dune manette de jeu (joystick) .......................................... 67
8.1. Fonctionnement des joysticks ...................................................... 67
8.2. Dboguer les joystiks ............................................................... 68
8.3. Configurer manuellement les boutons ........................................... 69
8.4. Modification de notre jeu pour grer les manettes .......................... 70
9. Publier son jeu ............................................................................... 72
9.1. Compilation du jeu .................................................................. 72
9.2. Publication sur Steam ............................................................... 73
9.3. Publication sur dautres plateformes ............................................. 76
10. Financer son projet ........................................................................ 78
10.1. Le financement participatif ....................................................... 78
10.2. Cration de la page projet ...................................................... 79
10.3. Dautres techniques de financement ........................................... 80
Cas pratiques ..................................................................................... 82
1. Cration d'un piano huit touches ................................................ 82
2. Jouons avec les prefabs .............................................................. 84
3. Ramasser des objets en fonction d'une variable ................................ 85
4. Des cubes qui vous suivent .......................................................... 86
5. Utilisation de l'acclromtre ........................................................ 87
6. Utilisation de la classe WWW ..................................................... 88
7. Tlchargement d'un son sur le serveur ........................................... 89

Liste des illustrations ............................................................................... 91

Index .................................................................................................. 93

pagevi

customer 507877 at 2016-01-21


507877 23:38:34 +0100
propos de l'auteur

Anthony Cardinale
Dveloppeur passionn de jeux vido, Anthony utilise Unity depuis 2008. cette date,
le logiciel commence tout juste se faire connatre en France, et il compte parmi les
premiers l'adopter. Auteur de plus d'une trentaine de jeux publis sur Google Play,
l'App Store ou Windows Phone Store, il s'est peu peu spcialis dans les applications
destination des mobiles et tablettes, aprs avoir galement dvelopp pour le web
et les PC.

En parallle, Anthony maintient diffrents sites d'e-learning. Il a ralis ce jour plus de


200 heures de formation vido sur la cration de jeux avec Unity, diffuses via son site
internet Formation facile.

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Introduction
Unity est un moteur de jeu polyvalent. Il est adapt tout type de projets (jeux de tir, jeux
d'arcade, jeux la premire personne, la troisime personne, jeux d'action, etc.), mais
qu'en est-il de la 2D ? En effet, on associe frquemment Unity la 3D, mais la cration
de jeux 2D en est-elle pour autant exclue ? Eh bien non, ne serait-ce qu'en utilisant une
camra capable de se dplacer sur deux seuls axes (et non trois), vous pouvez donner
l'illusion que votre jeu est en 2D.
Il a toujours t possible de crer des jeux 2D avec Unity, mais face la demande des
dveloppeurs, la socit Unity Technologies a cr un module spcifique. Celui-ci est
apparu avec la version 4 du logiciel et a continu d'voluer jusque dans la version 5
que nous avons aujourd'hui. Maintenant, lorsque vous crez un nouveau projet, vous
pouvez slectionner l'option 2D pour indiquer que votre jeu sera en 2D. En faisant cela,
vous aurez accs toutes les fonctionnalits ddies la 2D.
La conception 2D diffre lgrement de la 3D. Dans ce livre, nous allons explorer les
fonctionnalits qui lui sont propres tout en faisant un tour complet des tapes indispen-
sables la cration d'un jeu de qualit et la mise en place de fonctionnalits avances.
Nous allons crer ensemble un jeu de tir en vue de ct l'aide du module 2D. Au-
del des outils proposs par Unity, nous verrons comment crer notre propre plug-in ou
utiliser ceux des autres dveloppeurs pour optimiser notre dveloppement. Nous verrons
aussi comment enrichir le gameplay et supporter un joystick.
Le jeu dvelopp ici en exemple est galement utilis dans le livre IV. Rseau et mode
multijoueur, o nous verrons comment lui ajouter un mode multijoueur en ligne.

1. Qu'allez-vous apprendre dans ce livre ?

Chapitre 1 - Level design


Nous commencerons par poser les bases de conception de notre jeu. Nous runi-
rons les ressources ncessaires son dveloppement et crerons des niveaux et
un personnage joueur. Nous y aborderons galement la notion d'avant-plan et
d'arrire-plan.

Chapitre 2 Cration dun plug-in


Je vous montrerai comment dvelopper vos propres outils pour vous faciliter le tra-
vail de cration de niveaux. Nous coderons ici notre propre diteur de niveaux.

page1

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Chapitre 3 Programmation du joueur et de larme


Nous crirons ici les scripts C# permettant de dplacer le personnage joueur et le
faire tirer. Nous crerons son arme avec viseur et projectiles.

Chapitre 4 Barre de vie et effets


Afin damliorer le visuel de notre jeu, nous ajouterons des effets spciaux (par
exemple sur les projectiles pour crer des explosions), des effets lumineux ou encore
des effets sonores. Nous coderons galement la barre de vie des joueurs.

Chapitre 5 Quelques objets bonus


Pour pimenter un peu le jeu, nous ajouterons des armes ramasser, de la vie
collecter ou encore des piges viter.

Chapitre 6 Dcouverte de iTween


iTween est un plug-in permettant de raliser trs simplement des animations et tran-
sitions par script. Il est trs populaire et vous ne pouvez pas passer ct, c'est
pourquoi nous allons voir comment l'utiliser dans ce chapitre.

Chapitre 7 Ajout des ennemis


Le joueur doit avoir un objectif. Nous dvelopperons ici un mode de survie dans
lequel il pourra combattre des ennemis. Le but sera de survivre le plus longtemps
possible aux diffrents dangers du niveau.

Chapitre 8 Utilisation dune manette de jeu (joystick)


Certains joueurs prfrent jouer avec une manette de jeu mme sur PC. Afin de
satisfaire tout le monde, nous verrons comment la prendre en charge.

Chapitre 9 Publier son jeu


Nous passerons en revue quelques plateformes connues comme Steam, Facebook
ou encore Kongregate sur lesquelles nous allons pouvoir publier notre jeu.

Chapitre 10 Financer son projet


Les dveloppeurs indpendants ont des moyens trs limits et parfois insuffisants
pour financer un projet qui pourtant pourrait avoir un franc succs. Vous allez d-

page2

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

couvrir comment financer votre jeu afin de pouvoir le dvelopper et le commercia-


liser.

Cas pratiques
Dans ce chapitre, vous trouverez quelques cas pratiques pour appliquer les connais-
sances acquises dans ce livre. Prsents sous forme de petits projets raliser,
vous pourrez tester vos acquis et chercher par vous-mme la solution puis vrifier
si celle-ci est conforme ce que vous avez fait.

2. Ce dont vous avez besoin


Pour suivre ce livre, vous avez besoin de tlcharger et d'installer le logiciel Unity sur
votre machine. Vous devez galement tlcharger les sources des exemples depuis le
site de l'auteur ou celui de l'diteur (onglet COMPLMENTS).
Pour toute remarque, suggestion, question, vous pouvez me contacter via mon site web
http://anthony-cardinale.fr.

Il ne me reste plus qu' vous souhaiter une bonne lecture !

3. URL raccourcies
Dans un souci de lisibilit, et pour pouvoir les maintenir jour, nous avons pris le parti de
remplacer toutes les adresses internet par ce qu'on appelle des URL raccourcies. Une fois
que vous avez accd la page cible, nous vous invitons l'enregistrer avec un marque-
page si vous souhaitez y revenir frquemment. Vous disposerez alors du lien direct. Si
celui-ci se prime, n'hsitez pas repasser par l'URL raccourcie. Si cette dernire aussi
choue, vous pouvez nous le signaler !

page3

customer 507877 at 2016-01-21


507877 23:38:34 +0100
1
Level design
Le level design est ltape de conception des niveaux dun jeu. La programmation
nintervient pas au cours de cette tape. Dans ce chapitre, nous allons crer deux ni-
veaux dans lesquels le joueur pourra se dplacer et utiliser une arme pour tirer sur des
ennemis. Pour concevoir ces niveaux, nous utiliserons un package 2D de lAsset Store,
mais vous pouvez tout aussi bien exploiter d'autres ressources. De mme, ce que nous
allons faire n'est pas limit la 2D, vous pouvez l'adapter en vue d'un jeu 3D.

1.1. Prparation du projet


Avant de nous lancer, je vais vous prsenter en quelques lignes le jeu que nous allons
dvelopper ainsi que les fonctionnalits que nous implmenterons :

notre jeu sera en 2D et en vue de ct ;


le joueur pourra se dplacer de gauche droite et pourra sauter ;
le joueur possdera une arme capable de tirer un projectile lors dun clic en direc-
tion du curseur de la souris ;
le joueur disposera dune barre de vie et dun score ;
des objets pourront tre ramasss par le joueur pour dbloquer de nouvelles com-
ptences ;
un objectif sera propos au joueur, par exemple liminer le maximum d'ennemis ;
les niveaux seront composs de tiles, cest--dire des blocs qui sassemblent pour
crer un dcor.

Voil au niveau des fonctionnalits de notre petit jeu. Bien sr, vous tes libre dadapter
tout cela votre guise.

Pour commencer, crez maintenant un nouveau projet 2D dans Unity.

page4

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.1 : Cration d'un nouveau projet 2D

Ouvrez ensuite lAsset Store et tlchargez le projet 2D Roguelike propos gratuitement


par Unity.
Figure1.2 : Tlchargement d'un projet sur l'Asset Store

page5

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Importez ce projet et organisez votre espace de travail comme vous le souhaitez. Voil
comment jai adapt mon environnement de dveloppement :

Figure1.3 : Espace de travail

Nous allons utiliser les prefabs qu'il contient pour crer notre niveau en 2D en vue de
ct.

1.2. Conception du niveau


Pour concevoir le niveau, glissez/dposez un prefab (celui de votre choix) depuis la
fentre de projet vers la scne. Dans mon cas, je vais utiliser les prefabs Wall5 et Floor4
pour construire les zones sur lesquelles les joueurs pourront marcher.

Figure1.4 : Les prefabs que nous allons utiliser pour construire le niveau

page6

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Le mieux pour conserver une bonne organisation pour le projet est de crer des scnes
nommes Niveau1, Niveau2, Niveau3, etc.
Positionnez les prefabs en 0,0,0 afin de les placer au centre de la scne. Ensuite, slec-
tionnez un prefab, utilisez la combinaison de touches Ctrl+D pour dupliquer le prefab
puis utilisez les flches de dplacement tout en maintenant la touche Ctrl enfonce pour
dplacer les blocs dune unit.

Figure1.5 : Placement des prefabs

Aprs avoir assembl les blocs, vous devriez obtenir un rsultat similaire au mien :

Figure1.6 : Aperu global du niveau1

page7

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Comme vous pouvez le constater, jai cr un niveau simple avec plusieurs tages afin
de donner la possibilit aux joueurs de se dplacer confortablement sur la scne. Pour
organiser votre Hirarchie, je vous recommande de crer un GameObject vide via le
menu GAMEOBJECT/CREATE EMPTY et d'y placer tous vos blocs lintrieur.

Notez que par dfaut, les prefabs wall ont un Box Collider 2D et un script attach.
Pensez supprimer ce script, dont nous n'aurons pas besoin. Conservez le Box Collider
qui permet de rendre solide le niveau.

Figure1.7 : Les composants des blocs du niveau

Pour ajouter de la dcoration votre niveau, tlchargez quelques ressources suppl-


mentaires comme un arrire-plan, des arbres, des lianes, de lherbe sur lAsset Store ou
un site comme OpenGameArt.org. Utilisez toutes les ressources que vous souhaitez.

Importez les textures dans votre projet. Slectionnez-les et choisissez le type Sprite dans
la fentre de l'inspector :

page8

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.8 : Activation du mode Sprite

Note > Pour les jeux 2D, on utilise des sprites plutt que des textures. Ce type est apparu avec la version 4
du logiciel, qui avait alors ouvert les portes au dveloppement 2D. Les sprites sont dots de proprits
intressantes nous permettant de les animer, de les diter via le SPRITE EDITOR, etc. Ils sont optimiss
pour la 2D. Chaque fois que nous importerons une texture, nous la transformerons donc en sprite en
changeant son type.

Vous pouvez maintenant directement glisser/dposer votre sprite sur la scne :

Figure1.9 : Ajout du dcor

Comme il sagit dun lment dcoratif, vous devez bien faire attention le placer en
arrire-plan. Pour cela, vous pouvez utiliser les SORTING LAYER et le ORDER IN LAYER. Dans
mon cas, les paramtres de base fonctionnent mais jai quand mme prfr crer des
calques (layers).

page9

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.10 : Proprits du Sprite Renderer

Note > Le sprite renderer correspond la texture qui reprsente votre objet, il s'agit du visuel.

Note > Le SORTING LAYER est utilis pour dfinir quel sprite doit recouvrir l'autre s'il y a superposition. Le
ORDER IN LAYER permet de dfinir la priorit d'affichage pour des sprites se trouvant sur un mme SORTING
LAYER. En d'autres mots, si le SORTING LAYER est le mme, vous pouvez dfinir quel sprite doit tre au-
dessus de l'autre en cas de superposition en attribuant une valeur plus leve au ORDER IN LAYER.

Le SORTING LAYER permet donc de crer des calques et de les classer. Ainsi nous pouvons indiquer par
exemple que le calque arriere-plan se trouve devant le calque objets. Les sprites seront ainsi
affichs dans le bon ordre l'cran en fonction de leur calque.

Retenez simplement que si vous crez des calques (ce que je vous conseille de faire),
lordre dans lequel ils apparaissent sera respect dans votre jeu. Pour que les lments
placs sur le calque background se trouvent derrire ceux qui sont sur foreground, back-
ground doit tre avant foreground. Par exemple, comme vous pouvez le voir sur la Fi-
gure 1.11, jai cr le calque BG pour larrire-plan, je lai donc plac avant.

Figure1.11 : Outil de gestion des calques

page10

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Les lments dcoratifs ne doivent pas avoir de Collider ou dautres composants, ils ne
sont l que pour dcorer.

Voici ce que jobtiens avec quelques textures places sur ma scne :

Figure1.12 : Ajout de quelques objets

Une fois que vous tes satisfait de votre premire scne, vous pouvez lenregistrer afin
de la conserver dans votre projet. Appelez-la Niveau1. Crez ensuite une nouvelle scne
que vous appellerez Niveau2 et crez un autre niveau, diffrent du premier afin de
donner la possibilit au joueur de choisir le niveau sur lequel il souhaite affronter ses
ennemis. Mon niveau 2 est tout aussi simple que le niveau 1 mais jai ajout quelques
trous dans le sol pour mettre en place des piges mortels :

page11

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.13 : Le niveau2 de notre jeu

Encore une fois, je le rpte, vous pouvez crer tout ce que vous souhaitez. Votre niveau
peut faire la taille que vous voulez, tre dcor comme bon vous semble et contenir tous
les lments de votre choix, cest votre jeu, cet exercice nest l que pour vous guider et
vous donner de linspiration afin davancer ensemble.

1.3. Ajout du personnage joueur


Nous allons maintenant ajouter un personnage qui sera contrl par le joueur. Nous
configurerons par la suite ce personnage avec des scripts et des composants et nous
crerons un prefab. Dans un premier temps, nous ajouterons simplement le personnage
la scne et le doterons des composants de base ncessaires. Jutiliserai le personnage
qui se trouve dans le dossier prefabs du projet dexemple que nous avons tlcharg.

Il se peut que la texture du personnage ne soit pas applique par dfaut au prefab. Si
cest le cas, faites-la simplement glisser dans la variable Sprite du Sprite Renderer. Il se
peut aussi que certains composants soient manquants. Afin de partir sur une mme base,
vrifiez sur la Figure 1.14 que votre GameObject contient bien les mmes composants
que notre personnage.

page12

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.14 : Utilisation d'un personnage 2D et ses composants

Jai donc un Collider 2D, un Rigidbody 2D, un Sprite Renderer et un Animator. Jai
supprim le script qui se trouvait sur le prefab car nous allons dvelopper notre propre
script. Cest trs important dutiliser des Collider 2D et Rigidbody 2D. Si vous utilisez des
Colliders 3D ou un Rigidbody standard, les collisions ne se feront pas avec un dcor 2D.
Une fois que vous avez ajout le personnage et quil est prt, crez un prefab de celui-ci.

Note > Les Rigidbody 2D et Collider 2D fonctionnent de la mme faon que leurs homonymes standards,
cependant les proprits ne sont pas exactement les mmes et les composants 2D sont particulirement
adapts aux calculs physiques 2D. Pour vos jeux 2D, utilisez les composants 2D pour une optimisation
idale.

page13

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure1.15 : Notre personnage 2D

Si vous le souhaitez, vous pouvez diminuer trs lgrement la taille du Collider 2D de


votre personnage afin qu'il puisse passer entre deux blocs spars d'une unit sans frot-
tement. Si votre Collider a une taille de 1 unit et que l'espace entre deux cubes est de
1 unit, vous risquez de bloquer le personnage. Je vous conseille donc de donner une
taille de 0.95 au Collider du personnage. Encore une fois, vous pouvez utiliser dautres
personnages 2D trouvs sur lAsset Store ou sur OpenGameArt.org. Vous pouvez main-
tenant enregistrer votre travail, nous avons termin le design de nos deux niveaux !

Dans ce chapitre, vous avez vu comment :

crer un niveau 2D ;
crer un personnage 2D ;
ajouter les composants physiques 2D ;
crer des prefabs de nos lments.

page14

customer 507877 at 2016-01-21


507877 23:38:34 +0100
2
Cration dun plug-in
Dans le chapitre prcdent, nous avons conu deux niveaux pour notre jeu. Ces niveaux
tant simples, nous les avons crs manuellement laide de quelques sprites que nous
avons assembls. Cependant, dans les studios de jeux, il est trs rare que les level de-
signers crent tous les niveaux dun jeu la main. En effet, pour se simplifier le travail
et aller plus vite, ils disposent doutils comme par exemple des diteurs de niveaux per-
mettant d'automatiser leur conception.

Si vous souhaitez crer un gros jeu avec de nombreux niveaux, vous risquez de perdre
beaucoup de temps construire chacun d'entre eux comme nous l'avons fait au chapitre
prcdent. Cest pourquoi, dans ce chapitre je vais vous montrer comment crer un plug-
in pour Unity. Notre plug-in sera un diteur de niveaux maison.

2.1. Prsentation gnrale de notre plug-in


Figure2.1 : Aperu de notre diteur de niveaux

Notre outil doit nous permettre de crer rapidement des niveaux 2D. Pour cela, il doit
afficher lcran, sur la scne, une grille sur laquelle il nous suffira de cliquer pour
faire apparatre des lments dcoratifs comme par exemple des morceaux de sol qui

page15

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

peuvent sassembler (voir Figure 2.1). Le plug-in doit se charger de faire apparatre les
lments et de les positionner exactement cte cte.
Le designer aura simplement ajouter le prefab souhait la scne (celui qui sera
reproduit dans les cases de la grille), activer la grille et appuyer sur la touche A pour
gnrer le sol.
Note > Nous allons dvelopper ici un plug-in trs simple, mais le code sera facilement modifiable si vous
souhaitez ajouter des fonctionnalits. Les studios de jeux passent normment de temps mettre au
point ce type d'outils afin d'tre toujours plus productifs. Des quipes sont mme spcialises dans le
dveloppement de plug-ins. C'est pourquoi je vous invite faire voluer votre diteur de niveaux et y
ajouter toutes les fonctionnalits dont vous aurez besoin pour vos futurs projets.

Pour concevoir notre plug-in, nous allons utiliser certaines fonctions de la bibliothque
UnityEditor. Nous devrons donc ajouter l'en-tte de notre script la ligne de code
using UnityEditor; afin d'y avoir accs.

2.2. Cration du script de la grille


Nous allons commencer par crer le script qui affichera la grille lcran. Ce script
utilisera la fonction OnDrawGizmos, qui permet de dessiner des formes lcran. Il sera
accessible depuis le menu COMPONENT et pourra tre ajout un objet comme n'importe
quel autre composant.
Crez un nouveau script C# que vous appellerez Grid. Ouvrez ce script. Afin de crer
un nouvel lment dans le menu du logiciel, nous allons appeler linstruction AddCompo-
nentMenu juste avant la dclaration de la classe Grid : [AddComponentMenu("Custom/
Editor")]. Cela signifie que je souhaite ajouter le menu CUSTOM/EDITOR dans longlet
COMPONENT. Voici ce que cela donne dans Unity :

Figure2.2 : Notre onglet dans le menu

page16

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Note > L'onglet EDITOR nous permettra donc d'activer notre diteur de niveaux.

Nous allons ensuite dclarer trois variables dans notre script. La largeur, la hauteur et
la couleur de notre grille. Voici ces trois variables :

public float width = 1.0f; // Largeur dune cellule


public float height = 1.0f; // Hauteur dune cellule
public Color color = Color.yellow;

Note > Ici, le f signifie float. En C#, il est obligatoire de mettre un f derrire un chiffre virgule, sinon
le compilateur vous enverra un message d'erreur.

Ensuite, nous allons utiliser la fonction OnDrawGizmos pour gnrer la grille via deux
boucles for afin de crer, par exemple 500 lignes jaunes horizontales et 500 lignes
jaunes verticales toutes spares par la mme distance.

void OnDrawGizmos()
{
Vector3 pos = Camera.current.transform.position;
Gizmos.color = color;

for (float y = pos.y - 250.0f; y < pos.y + 250.0f; y+= height)


{
Gizmos.DrawLine(
new Vector3(-250.0f, Mathf.Floor(y/height) * height, 0.0f),
new Vector3(250.0f, Mathf.Floor(y/height) * height, 0.0f));
}

for (float x = pos.x - 250.0f; x < pos.x + 250.0f; x+= width)


{

Gizmos.DrawLine(
new Vector3(Mathf.Floor(x/width) * width, -250.0f, 0.0f),
new Vector3(Mathf.Floor(x/width) * width, 250.0f, 0.0f));
}
}

Dans cet exemple, on se base sur la position de la camra pour initialiser la position
de la grille . Ensuite, Gizmos.DrawLine permet de crer une ligne . La petite formule
mathmatique utilise permet de dfinir la taille et lorientation de chaque ligne. Floor
nous retourne le plus grand entier qui est infrieur ou gal un nombre donn. Les
boucles for permettent de dessiner des lignes droites spares par un espace dfini
en partant de 250 pour aller jusqu' 250 (il s'agit de la position de la ligne dans
l'espace). La fonction DrawLine prend le point de dpart et le point d'arrive d'un vecteur
(de notre ligne). Voil le script complet pour Grid.cs :

page17

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

using UnityEngine;
using System.Collections;

[AddComponentMenu("Custom/Editor")]
public class Grid : MonoBehaviour
{
public float width = 1.0f;
public float height = 1.0f;
public Color color = Color.yellow;

void OnDrawGizmos()
{
Vector3 pos = Camera.current.transform.position;
Gizmos.color = color;

for (float y = pos.y - 250.0f; y < pos.y + 250.0f; y+= height)


{
Gizmos.DrawLine(
new Vector3(-250.0f, Mathf.Floor(y/height) * height, 0.0f),
new Vector3(250.0f, Mathf.Floor(y/height) * height, 0.0f));
}

for (float x = pos.x - 250.0f; x < pos.x + 250.0f; x+= width)


{

Gizmos.DrawLine(
new Vector3(Mathf.Floor(x/width) * width, -250.0f, 0.0f),
new Vector3(Mathf.Floor(x/width) * width, 250.0f, 0.0f));
}
}
}

Si vous ajoutez un prefab sur une scne vide et que vous cliquez sur le nouveau menu
COMPONENT/CUSTOM/EDITOR, la grille doit apparatre sur la scne. Le script Grid est auto-
matiquement ajout lobjet slectionn. Les trois variables du script Grid peuvent tre
modifies si vous souhaitez changer la taille ou la couleur de la grille :

page18

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure2.3 : Les paramtres de la grille

Pour le moment notre script est fonctionnel mais il ne gre que la partie visuelle du plug-
in, aucune fonctionnalit na t implmente. Cest ce que nous allons faire la section
suivante.

Note > Dans notre cas, la grille est en 2D et en vue de ct. Vous pouvez bien sr utiliser les mmes
techniques pour les jeux en vue de dessus, les jeux 3D ou les jeux avec une vue isomtrique. Il faudra
videmment adapter la grille et la formule permettant de positionner les prefabs sur la grille.

2.3. Cration des fonctions du plug-in


Nous allons maintenant nous attaquer au cur du programme pour implmenter les
fonctions de notre plug-in. Notre diteur de niveaux va s'appuyer sur des fonctionnalits
mises disposition par l'diteur de Unity via la bibliothque UnityEditor. Pour cela,
notre script doit appeler UnityEditor dans son en-tte et tre enregistr dans un dossier
Editor la racine du projet. Nous commenons donc par crer ce dossier Editor et
nous y crons un nouveau script GridEditor :

page19

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure2.4 : Cration du script GridEditor

Note > Lorsquun script est plac dans le dossier Editor, il a accs des fonctions de lditeur de Unity.
Vous pourrez par exemple ajouter des lments un menu, crer des fentres qui se greffent sur l'interface
de Unity, excuter des actions (comme instancier un objet dans la scne) sans avoir besoin de lancer le
jeu, etc. Pour plus d'informations sur les fonctionnalits proposes, consultez la documentation en ligne.

Nous pouvons maintenant ouvrir ce script afin de coder les fonctionnalits de notre
diteur de niveaux. Nous commenons donc par y inclure UnityEditor. Nous devons
galement spcifier la classe associe au script via lattribut CustomEditor. Le bout de
code [CustomEditor(typeof(Grid))] doit tre plac juste devant la dclaration de la
classe. Ce qui nous donne :

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor(typeof(Grid))]
public class GridEditor : Editor
{

Nous allons maintenant crer une variable grid de type Grid dont le rle sera de grer
la grille. Nous utiliserons les fonctions OnEnable et OnDisable qui vont permettre dactiver
ou de dsactiver les fonctionnalits du plug-in. Lorsquun objet possdant le script Grid
sera slectionn, le plug-in sera actif sinon il sera inactif.

Dans la fonction OnEnable, nous devons rcuprer le script Grid de lobjet slectionn et
le stocker dans la variable. Ensuite, nous pouvons activer les fonctionnalits du plug-in en
appelant une fonction GridUpdate. Dans la fonction OnDisable, nous nous contenterons
de ne plus appeler GridUpdate. Voici ce que cela donne :

public void OnEnable()


{
grid = (Grid)target;

page20

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

SceneView.onSceneGUIDelegate += GridUpdate;
}

public void OnDisable()


{
SceneView.onSceneGUIDelegate -= GridUpdate;
}

Note > Rappel : += signifie que l'on ajoute une valeur au chiffre de dpart. Par exemple, si i=5 alors
i+=2 sera gal 7. Il s'agit d'une faon raccourcie de dire i = i + 2. De mme pour -= qui permet de
retirer une valeur un chiffre.

Nous devons maintenant dvelopper la fonction GridUpdate qui va se charger de g-


rer les vnements pris en compte par notre plug-in. savoir, dans notre cas, lorsque
le designer appuiera sur la touche A, le plug-in instanciera le dcor dans la case sur
laquelle se trouve la souris. Il y aura donc toutes ces informations rcuprer.

Notre fonction GridUpdate prendra un paramtre, la SceneView. Nous allons aussi crer
une variable qui va rcuprer les vnements, par exemple les touches du clavier qui
sont utilises et deux variables pour grer la position de la souris ainsi que le rayon qui
sera envoy de la camra vers la grille lors dun vnement. Voil les trois variables
de notre fonction :

Event e = Event.current;
Ray r = Camera.current.ScreenPointToRay(new Vector3(
e.mousePosition.x,
-e.mousePosition.y + Camera.current.pixelHeight));
Vector3 mousePos = r.origin;

Les rayons (Ray) servent en gnral savoir quel objet est touch par ce rayon. Les
rayons ont une direction et peuvent avoir une longueur. Nous allons ensuite crer une
condition pour savoir si le designer a utilis la touche A de son clavier :

if(e.isKey && e.character == 'a')


{
}

Si tel est le cas, nous instancions le prefab slectionn et nous le plaons dans la grille
grce une formule mathmatique. Nous rcuprerons le prefab instancier, l'aide
de la fonction suivante :

GameObject obj;
Object prefab = EditorUtility.GetPrefabParent(Selection.activeObject);

Et nous l'instancions avec la fonction InstantiatePrefab :

page21

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);

Cette fonction est similaire la fonction instantiate que vous connaissez, mais dans
ce cas, elle permet dinstancier un objet sur la scne sans mme que le jeu ne soit lanc.
Pour placer le prefab, jutilise la formule suivante :

Vector3 aligned = new Vector3(


Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
Mathf.Floor(mousePos.y/grid.height)*grid.height + grid.height/2.0f,
0.0f);
obj.transform.position = aligned;

La fonction Floor nous retourne un nombre prcis qui est le centre de la case sous la
souris. Ensuite, il nous suffit de placer lobjet cette position. Voil le script au complet :

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor(typeof(Grid))]
public class GridEditor : Editor
{
Grid grid;

public void OnEnable()


{
grid = (Grid)target;
SceneView.onSceneGUIDelegate += GridUpdate;
}

public void OnDisable()


{
SceneView.onSceneGUIDelegate -= GridUpdate;
}

void GridUpdate(SceneView sceneview)


{
Event e = Event.current;
Ray r = Camera.current.ScreenPointToRay(new
Vector3(e.mousePosition.x, -e.mousePosition.y +
Camera.current.pixelHeight));
Vector3 mousePos = r.origin;

if(e.isKey && e.character == 'a')


{
GameObject obj;
Object prefab =
EditorUtility.GetPrefabParent(Selection.activeObject);

obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);

page22

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Vector3 aligned = new Vector3(


Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
Mathf.Floor(mousePos.y/grid.height)*grid.height +
grid.height/2.0f,
0.0f);
obj.transform.position = aligned;
}
}
}

Notre plug-in est termin ! Nous avons le script de grille et le script permettant de grer
les vnements et de crer les prefabs. Vous pouvez donc tester votre diteur de niveaux.
Commencez par crer un prefab partir des sprites wall et floor. Une fois vos prefabs
crs, vous pouvez ajouter une nouvelle scne avec Ctrl+N. Sur celle-ci, placez par
exemple le prefab wall nimporte o. Ajoutez le script Grid grce au nouveau menu
COMPONENT/CUSTOM/EDITOR. La grille apparat lcran. Tout en laissant le prefab wall
slectionn, utilisez la touche A de votre clavier pour instancier dautres prefabs dans
la grille. Et voil le travail :

Figure2.5 : Plug-in en fonctionnement

Vous tes maintenant en mesure de crer des niveaux beaucoup plus rapidement grce
votre plug-in. Bien sr vous pouvez lamliorer et ajouter de nombreuses fonctionnalits
si vous souhaitez avoir un outil puissant pour tous vos futurs jeux 2D. Pensez supprimer

page23

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

les prefabs qui ont le script Grid une fois que vous avez termin la construction de votre
niveau pour ne pas avoir la grille en permanence lcran.

Dans ce chapitre, vous avez dcouvert :

ce qu'est un plug-in ;
comment crer un diteur de niveaux.

page24

customer 507877 at 2016-01-21


507877 23:38:34 +0100
3
Programmation du joueur
et de larme
Lintrt de notre jeu est d'utiliser son arme pour tirer des projectiles sur tous les ennemis
croiss. Chaque personnage disposera de trois vies. Lorsquun personnage est touch,
il perd une vie. Si la vie descend zro, le personnage perd. Si le joueur dtruit un
ennemi, il gagnera des points. Nous allons donc dvelopper le script qui permettra au
joueur de raliser les actions suivantes :

se dplacer de gauche droite ;


sauter ;
tirer un projectile ;
viser avec la souris.

3.1. Programmation des mouvements du joueur


Nous allons commencer par programmer les mouvements ralisables par le person-
nage. Notre jeu tant en vue de ct et en 2D, le joueur pourra se dplacer de gauche
droite. Nous allons donc utiliser les flches du clavier. Il est galement possible dutiliser
dautres touches ou mme une manette de jeu. Unity est en effet compatible avec nor-
mment de joysticks ou controllers.

Crez un nouveau script que vous appellerez Joueur et placez-le sur le prefab du joueur.
Pensez supprimer tous les scripts qui taient livrs avec le package tlcharg sur
lAsset Store afin dviter les problmes de compatibilit. Organisez galement votre
projet, par exemple comme cela :

page25

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure3.1 : Organisation du projet

Ouvrez le script Joueur.

Nous allons crer une variable vitesse qui sera la vitesse de dplacement : public
float vitesse = 7.0f;. Nous utiliserons la fonction FixedUpdate pour tester les v-
nements lis aux touches du clavier. FixedUpdate est similaire Update mais le nombre
dexcutions par seconde est fixe. Cela permet tous les joueurs qui installeront le jeu
de tourner la mme vitesse, peu importe la puissance de leur machine. De plus cette
fonction est prfrer lorsquil sagit de faire des calculs sur la physique dun objet
comme nous allons le faire. En effet, la fonction Update est appele plusieurs fois par
seconde mais l'intervalle entre deux appels n'est pas fixe, cela dpend de la complexit
du calcul raliser. FixedUpdate est appele plusieurs fois par seconde des intervalles
rguliers. Unity nous recommande de faire nos calculs physiques dans cette fonction
afin d'viter tout bug physique.

Pour identifier quelle touche du clavier a t appuye, nous utiliserons le


test if(Input.GetKey(KeyCode.LeftArrow)){}, et pour dplacer le personnage
transform.Translate().

void FixedUpdate () {
if(Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector2.left * vitesse * Time.deltaTime);
transform.localScale = new Vector3(-1,1,1);
}
else if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(Vector2.right * vitesse * Time.deltaTime);
transform.localScale = new Vector3(1,1,1);
}
}

page26

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Lorsque le joueur appuiera sur la flche gauche , nous ferons une translation vers la
gauche et inversement pour la droite . transform.localScale permet de faire
une symtrie du personnage pour quil regarde dans la direction du mouvement.
Note > Ici, le Time.deltaTime nous permet d'tre sr que le mouvement sera identique sur tous les
ordinateurs mme si la puissance n'est pas la mme. Ce sera d'autant plus important si nous souhaitons
lui ajouter un mode multijoueur.

3.2. Programmation du saut


Le personnage doit maintenant pouvoir sauter si le joueur appuie sur la touche Espace.
Nous allons crer une variable boolenne isJumping pour indiquer s'il est dj en train
de sauter ou non. Si ce nest pas le cas, on peut excuter la fonction. Placez donc ce
code en dbut de script au niveau des variables globales : private bool isJumping =
false;. Et voil le test placer dans la fonction FixedUpdate :

if(Input.GetKeyDown(KeyCode.Space))
{
if(!isJumping)
{
StartCoroutine(Jump());
}
}

Note > GetKeyDown permet de tester si le joueur a appuy sur une touche du clavier. L'vnement n'est
remont qu'une seule fois, lors de l'appui. GetKey permet de tester en continu si une touche est enfonce.
GetKey peut donc tre utilise pour grer le mouvement du personnage. Si la touche flche du haut reste
enfonce, le personnage continue d'avancer. Chaque fonction est utilise dans un cas particulier.

Comme vous pouvez le voir, nous appelons une coroutine. Les coroutines permettent de
faire une pause de quelques secondes avant de poursuivre lexcution de la fonction.
Nous pourrons ainsi faire en sorte que le personnage ne puisse sauter que toutes les
1,5 secondes. cette fin, nous utilisons la fonction WaitForSeconds.

La fonction AddForce, quant elle, servira propulser le personnage vers le haut. Voil
la fonction Jump placer aprs FixedUpdate :

IEnumerator Jump()
{
isJumping = true;
GetComponent<Rigidbody2D>().AddForce(Vector2.up * 500);
yield return new WaitForSeconds(1.5f);
isJumping = false;

page27

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

IEnumerator est un mot cl qui, s'il est plac devant le nom d'une fonction, autorise
l'emploi de l'instruction yield permettant de mettre un script en pause.

Nous indiquons que le joueur est en train de sauter.

Nous appliquons la force vers le haut.

Nous patientons une seconde et demie.

Enfin, nous remettons la variable isJumping false.

Cette fonction sera appele chaque fois que le joueur appuiera sur la barre despace.
Voici le script complet qui gre la fois les mouvements et le saut du personnage :

using UnityEngine;
using System.Collections;

public class Joueur : MonoBehaviour {

public float vitesse = 7.0f;


private bool isJumping = false;

void FixedUpdate () {
if(Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector2.left * vitesse * Time.deltaTime);
transform.localScale = new Vector3(-1,1,1);
}

else if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))


{
transform.Translate(Vector2.right * vitesse * Time.deltaTime);
transform.localScale = new Vector3(1,1,1);
}

if(Input.GetKeyDown(KeyCode.Space))
{
if(!isJumping)
{
StartCoroutine(Jump());
}
}
}

IEnumerator Jump()
{
isJumping = true;
GetComponent<Rigidbody2D>().AddForce(Vector2.up * 500);
yield return new WaitForSeconds(1.5f);

page28

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

isJumping = false;
}
}

Vous pouvez tester le script pour voir si tout fonctionne mais faites bien attention dco-
cher la case IS KINEMATIC du Rigidbody 2D si elle est coche. Dans le projet tlcharg,
cette case tait coche par dfaut mais dans notre cas il ne le faut pas. IS KINEMATIC
annule les forces physiques et ce nest pas ce que nous voulons. De plus, toujours au
niveau du projet tlcharg, le personnage dispose dun Animator pour les animations.
Vous devez dcocher la case APPLY ROOT MOTION afin que lanimation ne soit pas priori-
taire sur la physique. Enfin, nous devons bloquer la rotation sur laxe Z au niveau du
Rigidbody. Voil une capture dcran des paramtres se trouvant dans linspector :

Figure3.2 : Paramtres du joueur

Si vous testez, vous devriez pouvoir vous dplacer et sauter afin de vous balader dans
le niveau.

page29

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

3.3. Cration du viseur et de larme


Le joueur disposera d'une arme capable de tirer des projectiles et d'un viseur qui suivra
les mouvements de la souris. Nous allons commencer par crer le viseur qui doit toujours
rester la mme distance du personnage tout en suivant les mouvements de la souris.
Vous devez importer une image voquant un viseur et la mettre en mode Sprite. Pour
ma part, jai rcupr un visuel sur OpenGameArt en faisant une recherche sur le mot
cl crosshair. Ensuite vous pouvez le placer sur la scne :

Figure3.3 : Positionnement du viseur

Placez le GameObject du viseur dans le GameObject du personnage joueur afin que


le viseur soit enfant du joueur.

Crez ensuite un nouveau script Arme que vous placerez sur le viseur. Pour grer la
distance du curseur par rapport au joueur, nous allons avoir besoin de deux variables.
La distance qui sera une variable float et lobjet par rapport auquel le viseur doit garder
sa distance :

public float distance = 2.0f;


public GameObject otherObject;

Nous pouvons ensuite passer la fonction Update dans laquelle nous allons placer le
viseur par rapport au joueur mais aussi par rapport la souris. Si la souris est droite
de lcran, le curseur sera droite du joueur et ainsi de suite. Le curseur pourra donc
faire le tour du personnage selon un rayon spcifi. Input.mousePosition, quant elle,
nous permettra de rcuprer la position de la souris. Voil la fonction au complet :

void Update () {

page30

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

transform.position = new Vector3(


Input.mousePosition.x - (Screen.width / 2),
Input.mousePosition.y - (Screen.height / 3),
0);
transform.position = (transform.position
- otherObject.transform.position).normalized * distance
+ otherObject.transform.position;
}

Vous pouvez dores et dj tester ce bout de code pour vous assurer de son bon fonc-
tionnement. Maintenant le viseur reste une distance fixe du joueur et se place en di-
rection du curseur de sa souris. Le joueur pourra donc tirer les projectiles en visant un
endroit particulier.

Figure3.4 : Dplacement du viseur avec la souris

Nous pouvons maintenant passer limplmentation de la fonction de tir. Pour les pro-
jectiles, nous avons besoin de crer un nouveau prefab avec un Rigidbody 2D et un
Collider 2D. Une simple sphre peut suffire, mais vous tes libre de choisir n'importe
quel objet. L'essentiel est dutiliser les composants se trouvant dans la rubrique Physics
2D, car nous dveloppons un jeu 2D. Dans mon cas, ce sera une sphre avec les com-
posants physiques que vous pouvez retrouver sur Figure 3.5.

page31

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure3.5 : Prparation du projectile

Une fois le prfab de votre projectile cr, vous devez l'instancier lors du tir. Nous allons
donc reprendre le script Joueur.cs et lui ajouter une fonction de tir. Nous avons besoin
d'une variable supplmentaire correspondant au GameObject du projectile :

public GameObject bullet;

La variable bullet sera le projectile instancier. Nous l'ajoutons au script Joueur.cs car
c'est ce dernier qui grera tous les vnements clavier/souris. Le script Arme.cs servira
quant lui uniquement grer la position du viseur.
Comme pour la fonction de saut, nous allons appeler la fonction de tir lors d'un v-
nement, ici un clic gauche : si le joueur clique avec le bouton gauche de la souris, on
peut tirer.

page32

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

if(Input.GetMouseButtonDown(0))
{
CmdFire();
}

Et voil la fonction de tir :

void CmdFire()
{
GameObject go = (GameObject)Instantiate(
bullet, viseur.transform.position, Quaternion.identity);
go.GetComponent<Rigidbody2D>().AddForce(
(viseur.transform.position - transform.position) * 250);
}

Dans la fonction CmdFire, j'instancie le prefab du projectile la position du viseur. Pour


faire cela, nous crons une variable viseur de type GameObject dans laquelle nous fai-
sons glisser le GameObject du viseur. Nous convertissons l'objet instanci en GameOb-
ject via l'instruction (GameObject) et nous appliquons une force au Rigidbody avec Add-
Force. La soustraction nous permet d'obtenir un vecteur qui part du joueur vers le viseur
afin de donner une bonne direction au projectile.
Note > Le quaternion correspond la rotation d'un objet. Ici, identity nous permet de dire que nous
souhaitons conserver la rotation telle qu'elle est dans le prefab que nous instancions.

J'utilise le prfixe "Cmd" pour nommer ma fonction Fire afin de respecter une convention
donne par Unity. Vous verrez par la suite, si vous lisez le module IV. Rseau et mode
multijoueur, que nous modifierons cette fonction de tir pour la faire excuter par le ser-
veur. Si nous ne respectons pas cette convention de nommage, le script ne fonctionnera
pas. Je vous conseille donc de bien nommer vos fonctions ds le dbut.
Note > Les commandes serveur [Command] sont des fonctions qui doivent tre excutes par le serveur
uniquement. Ces fonctions doivent tre prfixes par le mot "Cmd". Si votre fonction s'appelle "Tirer",
vous devez la renommer en "CmdTirer" ou encore "Cmd_Tirer". Pour en apprendre plus, je vous invite
lire le module IV. Rseau et mode multijoueur.

Voici le script Arme.cs au complet ci-dessous :

using UnityEngine;
using System.Collections;

public class Arme : MonoBehaviour {

public float distance = 2.0f;


public GameObject otherObject;

void Update () {

page33

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

transform.position = new Vector3(


Input.mousePosition.x - (Screen.width / 2),
Input.mousePosition.y - (Screen.height / 3),
0);
transform.position = (transform.position
- otherObject.transform.position).normalized * distance
+ otherObject.transform.position;
}
}

Et voil le script Joueur.cs avec la fonction de tir mise jour :

using UnityEngine;
using System.Collections;

public class Joueur : MonoBehaviour {

public float vitesse = 7.0f;


private bool isJumping = false;
public GameObject viseur;
public GameObject bullet;

void FixedUpdate () {
if(Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector2.left * vitesse * Time.deltaTime);
transform.localScale = new Vector3(-1,1,1);
}

else if(Input.GetKey(KeyCode.D) ||
Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(Vector2.right * vitesse * Time.deltaTime);
transform.localScale = new Vector3(1,1,1);
}

if(Input.GetKeyDown(KeyCode.Space))
{
if(!isJumping)
{
StartCoroutine(Jump());
}
}

if(Input.GetMouseButtonDown(0))
{
CmdFire();
}
}

IEnumerator Jump()
{
isJumping = true;

page34

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

GetComponent<Rigidbody2D>().AddForce(Vector2.up * 500);
yield return new WaitForSeconds(1.0f);
isJumping = false;
}

void CmdFire()
{
GameObject go = (GameObject)Instantiate(
bullet, viseur.transform.position, Quaternion.identity);
go.GetComponent<Rigidbody2D>().AddForce(
(viseur.transform.position - transform.position) * 250);
}
}

Ici, 250 est la puissance avec laquelle la balle sera propulse. Vous pouvez modifier
cette valeur votre guise ou encore mieux, crer une variable publique puissance.

Pensez attribuer toutes les variables des scripts avant de tester l'arme. Vous devez
faire glisser le prefab de la balle dans la variable Bullet. Puis enregistrez et testez le
jeu, normalement tout doit fonctionner. Vous pouvez vous dplacer et tirer avec votre
nouveau jouet ! Lors du clic, le projectile est propuls comme ceci :

Figure3.6 : Tir d'un projectile

Vous pouvez tout enregistrer et remplacer le prefab du personnage par le nouveau


entirement configur.

page35

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

3.4. Gestion des impacts des projectiles


Afin de finir ce chapitre et rendre notre systme totalement fonctionnel, nous allons crer
un petit script qui permettra aux projectiles d'infliger des dgts aux ennemis touchs
et ainsi de faire baisser leur vie (voir chapitre Ajout des ennemis pour la cration des
ennemis).
Crez un script que vous appelerez Bullet.cs et placez celui-ci sur le prefab reprsen-
tant votre projectile. Ouvrez ce script afin de coder la fonction permettant d'appliquer
les dgts un personnage.
Notre script contiendra une seule variable : public int degats = 1;. Cette variable
reprsente la puissance de votre projectile. Ici, l'ennemi touch perdra un point de vie.
Nous allons ensuite utiliser la fonction void OnCollisionEnter2D(Collision2D col)
de Unity pour appeler une fonction lors d'une collision entre le projectile et un ennemi.
Si le personnage touch a le tag Player, nous accdons son script Vie et dcrmentons
la valeur de sa vie.
Note > Ici le tag Player est utilis pour l'ensemble des personnages suceptibles d'tre touchs par un
projectile, pas seulement pour le personnage du joueur. Tous les personnages ayant le mme comporte-
ment lorsqu'ils sont touchs par un projectile, cela vitera d'avoir dupliquer du code. Nous utilisons
donc ce tag aussi pour les ennemis.

void OnCollisionEnter2D(Collision2D col)


{
if(col.gameObject.tag == "Player")
{
Vie scriptVie = col.gameObject.GetComponent<Vie>();
if(scriptVie != null)
{
scriptVie.vie -= degats;
GameObject.Find("Player").GetComponent<Joueur>().score += 1;
}
}

Destroy(this.gameObject);
}

Ce script est relativement simple, si le personnage touch a le script Vie attach, on


diminue sa vie et on augmente le score du joueur. Le projectile est ensuite dtruit pour
viter qu'on se retrouve la fin avec des centaines de sphres sur la scne.
Attention > Vous devez imprativement dtruire la totalit des objets instancis par le joueur comme
par exemple les projectiles. En effet, si le joueur peut tirer l'infini et si vous ne dtruisez pas les
projectiles au sol, l'ordinateur (ou la console) sera rapidement dpass par la quantit d'informations
calculer. Chaque objet doit tre calcul (position, rotation, mouvement, etc.) et affich l'cran environ

page36

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

60 fois par seconde. Si des centaines d'objets sont affichs en mme temps, votre jeu subira de nombreux
ralentissements et deviendra vite injouable. Dtruisez donc tout ce qui est instanci.

Dans ce chapitre, nous avons programm :

le mouvement du personnage ;
l'arme du personnage ;
le viseur ;
l'impact des projectiles sur les cibles.

page37

customer 507877 at 2016-01-21


507877 23:38:34 +0100
4
Barre de vie et effets
Lorsque le joueur ralise une action, il souhaite savoir si son action a fonctionne ou non.
Il est trs important de mettre en place un feedback afin de lui indiquer que son action
a fonctionn et qu'elle a provoqu un vnement comme par exemple faire perdre un
point de vie un adversaire. Cela peut se manifester par un clignotement ou par une
barre de vie qui diminue ou encore un son indiquant que quelque chose sest produit.
Note > Certains dveloppeurs peu expriments font parfois l'erreur de ne pas mettre en place de feedback.
En effet, il est difficile pour un dveloppeur de se mettre la place d'un joueur et d'imaginer toutes les
possibilits. Lorsque vous tirez sur un ennemi, vous savez que vous le blessez mais si l'ennemi ne clignote
pas, le joueur va peut-tre se dire que son arme est inefficace pour ce type de monstre. La rgle de base
est de toujours indiquer au joueur si son action fonctionne.

Nous allons mettre cela en place en ajoutant une barre de vie chaque personnage
(ennemis ou joueurs). Cette barre de vie sera compose de trois curs. Le joueur pourra
donc encaisser trois coups avant de mourir. Nous allons galement voir comment crer
des effets visuels comme des explosions ou des effets lumineux sur les projectiles.

4.1. Cration de la barre de vie


Notre barre de vie sera trs simple car nous nous contenterons de placer une image
au-dessus de la tte du personnage. Jai donc rcupr trois images sur OpenGameArt
avec un, deux et trois curs qui reprsenterons les vies.

Figure4.1 : Images de la barre de vie

page38

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Une fois que les images sont de type Sprite, nous pouvons les glisser/dposer sur la
scne. Placez limage des trois curs au-dessus de la tte du personnage dans la fentre
de scne et faites glisser cette image lintrieur de l'objet personnage (dans la fentre
hirarchie) afin que la barre de vie soit enfant du personnage. De cette faon, la barre
de vie suivra les mouvements du personnage.

Figure4.2 : Aperu de la barre de vie

Comme pour le reste, vous pouvez laisser votre imagination vous guider si vous souhaitez
utiliser quelque chose de plus original que des curs pour votre barre de vie. Pour
fonctionner, cette barre de vie a besoin dun script. Ce script calculera la vie restante et
remplacera limage en fonction du nombre de points de vie restants.

4.2. Cration du script de vie


Vous pouvez donc crer un nouveau script C# que vous appellerez Vie. Ce script
contiendra la variable de vie qui sera un int, un tableau de sprites avec les trois
images de curs, une variable de type GameObject avec un systme de particules
pour lexplosion du personnage lorsquil na plus de vie et enfin une quatrime variable
qui contiendra le GameObject de la barre de vie. Ce script sera plac sur le prefab du
joueur. Voil les quatre premires variables :

public int vie = 3;


public Sprite[] textures;
public GameObject particules;
public GameObject barreDeVie;

page39

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Pour la variable de particules, vous pouvez importer le package Particle Systems


depuis le menu ASSETS/IMPORT PACKAGE/PARTICLE SYSTEMS.
Figure4.3 : Import des particules

Une fois que vous avez ajout le script au prefab du personnage, pensez attribuer
les valeurs des variables comme cela :
Figure4.4 : Configuration du script de vie

Nous pouvons maintenant passer la fonction update qui va nous permettre de modifier
la texture de barreDeVie avec les sprites se trouvant dans le tableau textures. Nous
allons utiliser linstruction switch pour tester la valeur de la variable vie. En fonction de
celle-ci, nous modifions le sprite utilis par la barre de vie comme cela :

case 3 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[2];
break;

Ce qui nous donne le code suivant :

void Update () {

page40

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

switch (vie)
{
case 3 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[2];
break;
case 2 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[1];
break;
case 1 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[0];
break;
default:
print("Perdu");
break;
}
}

Si vous testez ce script, il devrait dj fonctionner. La Figure 4.5 montre ce que cela
donne lorsque le personnage na plus quun seul point de vie. Comme notre variable
vie est en public, nous pouvons manuellement modifier sa valeur pour tester le fonc-
tionnement de la barre.
Figure4.5 : Barre de vie en fonctionnement

Dans ce mme script Vie, nous pouvons dfinir diffrents comportements dans le cas o
la vie descend zro (cas default). Par exemple, nous pouvons instancier des particules
et crer une fonction respawn() qui rinitialisera le joueur afin quil puisse continuer
jouer.

default:
Instantiate(particules, transform.position, Quaternion.identity);
respawn();
break;

Et voil la fonction respawn :

void respawn()
{
vie = 3;
this.gameObject.transform.position = new Vector3(0,0,0);

page41

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Cette fonction permet de remettre les points de vie du joueur trois et de le repositionner
au centre de la scne.

4.3. Gestion des collisions


Il se peut, du fait de la configuration de nos niveaux, que le joueur soit amen tomber
dans le vide. Si cela se produit, dans ltat actuel des choses le joueur tombera indfini-
ment, ce qui peut tre problmatique. Nous allons donc crer une fonction de collision,
toujours dans le script Vie, pour remdier cette situation.
Nous allons tester avec OnTriggerEnter2D si le joueur touche un GameObject ayant un
Collider 2D et ayant pour tag "vide". Si tel est le cas, le joueur perd et nous appelons
respawn.

void OnTriggerEnter2D(Collider2D col)


{
if(col.gameObject.tag == "vide")
{
vie = 0;
respawn();
}
}

Pensez toujours enregistrer les modifications apportes votre prefab afin de conser-
ver la dernire version de celui-ci. Vous pouvez remplacer le prfab existant par le nou-
veau. Voil le script Vie au complet :

using UnityEngine;
using System.Collections;

public class Vie : MonoBehaviour {

public int vie = 3;


public Sprite[] textures;
public GameObject particules;
public GameObject barreDeVie;

void Update () {
switch (vie)
{
case 3 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[2];
break;
case 2 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[1];
break;

page42

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

case 1 :
barreDeVie.GetComponent<SpriteRenderer>().sprite = textures[0];
break;
default:
Instantiate(particules, transform.position, Quaternion.identity);
respawn();
break;
}
}

void respawn()
{
vie = 3;
this.gameObject.transform.position = new Vector3(0,0,0);
}

void OnTriggerEnter2D(Collider2D col)


{
if(col.gameObject.tag == "vide")
{
vie = 0;
respawn();
}
}
}

Maintenant que ceci est fait, vous devez crer un cube avec un Collider 2D et un tag
"vide" et le placer en dessous de chacun de vos niveaux. Sa taille doit tre suffisante
pour couvrir toute la surface du niveau. Dsactivez son composant Mesh Renderer pour
le rendre invisible.
Figure4.6 : Cube de collision

page43

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Et voil la configuration au niveau de linspector :

Figure4.7 : Configuration du cube de collision

Dsormais, lorsque le personnage entrera en collision avec ce cube, il perdra. Il ne


pourra plus se sauver et sera oblig de se battre sur le niveau que nous avons cr. Il
est obligatoire de faire cela pour tous vos jeux : vous devez toujours placer un Collider
gant sous vos scnes pour viter ce type de bugs. Libre vous ensuite de crer par
exemple un systme de particules lors de la collision.
Note > Vous ne pouvez pas prvoir ce que va faire le joueur, il est impossible d'imaginer toutes les
possibilits, c'est pourquoi vous devez faire attention limiter les mouvements du personnage. Vous
devez non seulement placer un cube gant sous vos niveaux mais aussi crer des murs invisibles qui
vont entourer vos scnes pour qu'il ne puisse pas aller derrire le dcor du jeu.

4.4. Effets lumineux sur le projectile


Dans un jeu vido, il est important de mettre en place des effets afin de toujours crer du
mouvement et des animations et garder le joueur en haleine. Les explosions ou encore
la barre de vie sont dj des valeurs ajoutes. Nous allons aller encore plus loin en
enrichissant le prefab du projectile.

Dans un premier temps, nous allons ajouter une point light notre projectile (GAMEOB-
JECT/LIGHT/POINT LIGHT). Placez cette lumire dans le projectile et donnez une couleur
la lumire. Le niveau sera clair au passage des projectiles, cela intensifiera le mouve-
ment et laction.

page44

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Nous allons maintenant ajouter un autre composant : le Trail Renderer (COMPONENT/EF-


FECTS/TRAIL RENDERER). Celui-ci va crer une sorte de ligne lumineuse qui suivra le projec-
tile. Il doit possder un Material, une dure de vie, une taille de dpart et une taille de
fin. Vous devez cocher la case AUTODESTRUCT pour que la dure de vie de la ligne soit
prise en compte. Voil mes paramtres :

Figure4.8 : Configuration du Trail Renderer

Jai utilis un Material trouv dans le package des particules. Voil ce que cela donne :

Figure4.9 : Aperu du Trail Renderer

Sur ce visuel vous pouvez voir la lumire ainsi que la ligne lumineuse qui suit le projectile
dans son mouvement. Modifier votre guise les valeurs du Trail Renderer afin de dimi-
nuer sa taille, sa dure de vie ou son Material. Je vous conseille de lui donner une dure
de vie de 1 ou 2 secondes, pas plus. Une fois fait, enregistrez le prefab du projectile
pour conserver les modifications pour votre jeu.

4.5. Effets sonores


Le son est galement extrmement important dans les jeux. Je vous invite ajouter une
musique dambiance ou encore un bruit lors du tir dun projectile. Pour ajouter un son,
vous devez placer un Audio Source sur lobjet qui produit le son. Par exemple, sur un
au personnage :

page45

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure4.10 : Ajout d'un Audio Source

Maintenant, vous pouvez diter le script Joueur et ajouter une variable audioclip :

public AudioClip son;

Et pour produire le son, vous utiliserez cette ligne de code :

GetComponent<AudioSource>().PlayOneShot(son);

Voici ma nouvelle fonction CmdFire :

void CmdFire()
{
GetComponent<AudioSource>().PlayOneShot(son);
GameObject go = (GameObject)Instantiate(bullet,
viseur.transform.position, Quaternion.identity);
go.GetComponent<Rigidbody2D>().AddForce((viseur.transform.position -
transform.position) * 250);
}

Vous retrouverez quelques sons dans les sources tlchargeables de ce livre.

Figure4.11 : Script Joueur

page46

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Nous avons donc fait un tour rapide de quelques enrichissements qui vont rendre notre
jeu plus dynamique, moins monotone. Vous pouvez continuer crer une ambiance
immersive grce ces techniques, le joueur nen sera que plus satisfait. Dans le mme
but, nous allons au chapitre suivant diversifier le gameplay.

Dans ce chapitre, nous avons vu comment :

crer une barre de vie ;


coder le script de vie ;
grer les collisions 2D ;
crer des effets visuels et sonores.

page47

customer 507877 at 2016-01-21


507877 23:38:34 +0100
5
Quelques objets bonus
Pour rendre notre jeu plus captivant, nous allons ajouter quelques objets interactifs qui
vont apporter un peu de nouveauts au gameplay.

5.1. Cration des prefabs


Pour illustrer ce que nous allons dvelopper dans ce chapitre, jai rcupr une image
de medikit et une autre de pack darmes, que jai trouves sur lAsset Store dans le
package gratuit 2D Platformer cr par Unity Technologies.

Figure5.1 : Les textures des objets

Ajoutez-y toutes sortes d'objets de votre choix (armes, gilets pare-balles, fruits et lgumes,
etc.). Importez les images reprsentant vos objets dans Unity sans oublier de les convertir
en type Sprite. Faites glisser la texture sur la scne pour pouvoir lui ajouter un Box
Collider 2D, un tag et activer ISTRIGGER. Crez ensuite un prefab de votre objet afin de
pouvoir le rutiliser dans le jeu par la suite.

page48

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure5.2 : Cration d'un prefab objet

Maintenant que les prefabs sont prts nous pouvons passer la partie programmation.

5.2. Programmer linstanciation des objets


Nous allons crer un script qui va instancier des objets alatoires intervalles de temps
rguliers. Ce script fera apparatre un objet au hasard toutes les 10 secondes.

Commencez par crer un GameObject vide et placez-le sur votre scne lendroit o
vous voulez que les objets surgissent. Dans notre cas, tous les objets apparatront au
mme endroit, mais vous pouvez crer autant de "points d'instanciation" que vous le
souhaitez pour les faire apparatre en diffrents endroits.

Figure5.3 : Cration d'un objet vide

Cet objet vide servira juste contenir le script et nous utiliserons sa position pour faire
apparatre notre mdikit ou arme cet endroit. Crez un nouveau script Spawner et ou-

page49

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

vrez-le. Nous allons crer trois variables : une variable float qui sera lintervalle de temps
entre deux instanciations (spawnTime), une variable float qui correspondra au temps
dattente avant la premire instanciation (spawnDelay) et un tableau de GameObject
qui contiendra les objets instanciables.

public float spawnTime = 5f;


public float spawnDelay = 3f;
public GameObject[] objets;

La fonction Start servira appeler la fonction dinstanciation en boucle en respectant


les intervalles de temps. Pour cela, nous utiliserons la fonction InvokeRepeating, qui
permet dappeler une autre fonction en boucle.

void Start ()
{
InvokeRepeating("Spawn", spawnDelay, spawnTime);
}

Notre fonction Spawn, quant elle, instanciera les objets :

void Spawn ()
{
Instantiate(objets[Random.Range(0, objets.Length)],
transform.position, transform.rotation);
}

Elle va nous permettre de faire apparatre un objet de manire alatoire (grce au


Random) la position de l'objet sur lequel est attach le script. Ce qui nous donne le
code suivant :

using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour


{
public float spawnTime = 5f;
public float spawnDelay = 5f;
public GameObject[] objets;

void Start ()
{
InvokeRepeating("Spawn", spawnDelay, spawnTime);
}

page50

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

void Spawn ()
{
Instantiate(objets[Random.Range(0, objets.Length)],
transform.position, transform.rotation);
}
}

Enregistrez le script, placez-le sur lobjet vide et configurez-le comme sur la Figure 5.4.

Figure5.4 : Configuration du script Spawner

Le script fonctionne, vous pouvez tester :

Figure5.5 : Gestion du clic

Le problme qui se pose est que les objets sont instancis mme si un autre objet est dj
prsent, ils vont donc se superposer. Pour viter cela, vous pouvez donner une dure de
vie de quatre secondes vos objets :

void Spawn ()
{
GameObject go = (GameObject)Instantiate(objets[Random.Range(0,
objets.Length)], transform.position, transform.rotation);
Destroy(go,4.0f);
}

page51

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Ainsi les objets seront dtruits avant quun autre ne rapparaisse. Vous pouvez dupliquer
le script Spawner pour en placer plusieurs dans vos niveaux. Vous pouvez aussi donner
des valeurs diffrentes ou alatoires pour que le joueur ne shabitue pas un rythme
donn.

5.3. Programmation des collisions


Nous pouvons maintenant passer la gestion des collisions entre le personnage et ces
objets pour dtecter quand celui-ci les ramasse. Pour cela, vous pouvez utiliser la fonction
OnTriggerEnter2D dans le script Joueur.

void OnTriggerEnter2D(Collider2D col)


{
if(col.gameObject.tag == "vie")
{
GetComponent<Vie>().vie = 3;
Destroy(col.gameObject);
}
if(col.gameObject.tag == "arme")
{
bullet = bullet2;
Destroy(col.gameObject);
}
}

Cette fonction permet d'ajouter de la vie si le personnage ramasse de la vie et de mo-


difier le projectile si le personnage ramasse des armes . Pour remplacer le projectile et
modifier le prefab instanci, nous crivons bullet = bullet2 . Cela implique d'avoir
cr au pralable une nouvelle variable public GameObject bullet2;, qui correspon-
dra un autre projectile faisant plus de dgts (2 au lieu de 1). Dans le script Bullet,
crez une nouvelle variable public int degats = 1; et modifiez scriptVie.vie -= 1;
par scriptVie.vie -= degats;. Ainsi vous pouvez crer un autre prefab de projectile
et modifier la valeur de la variable degats pour qu'il soit plus ou moins puissant.

Figure5.6 : Le second projectile

Enregistrez ce second prefab et placez-le dans la variable bullet2 du script Joueur :

page52

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure5.7 : Configuration du script joueur

Dsormais, les joueurs ont la possibilit de regagner de la vie ou changer darme grce
aux objets qu'ils ramassent sur le niveau. Vous pouvez tester et vous assurer que le
personnage parvient bien ramasser les objets et que cela a un impact sur le jeu.

Pour vous aider, voici le code complet du script Joueur.cs :

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

public class Joueur : MonoBehaviour {

public float vitesse = 7.0f;


private bool isJumping = false;
public GameObject viseur;
public GameObject camera;
public GameObject bullet;
public GameObject bullet2;
public AudioClip son;

void FixedUpdate () {

if(Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector2.left * vitesse * Time.deltaTime);
transform.localScale = new Vector3(-1,1,1);
}

else if(Input.GetKey(KeyCode.D) ||
Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(Vector2.right * vitesse * Time.deltaTime);
transform.localScale = new Vector3(1,1,1);
}

if(Input.GetKeyDown(KeyCode.Space))
{
if(!isJumping)
{
StartCoroutine(Jump());

page53

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

}
}

if(Input.GetMouseButtonDown(0))
{
CmdFire();
}

GameObject.Find("score").GetComponent<Text>().text = "Score :
"+score;
}

IEnumerator Jump()
{
isJumping = true;
GetComponent<Rigidbody2D>().AddForce(Vector2.up * 500);
yield return new WaitForSeconds(1.0f);
isJumping = false;
}

void CmdFire()
{
GetComponent<AudioSource>().PlayOneShot(son);
GameObject go = (GameObject)Instantiate(bullet,
viseur.transform.position, Quaternion.identity);
go.GetComponent<Rigidbody2D>().AddForce((viseur.transform.position -
transform.position) * 250);
go.GetComponent<Bullet>().idPlayer =
GetComponent<NetworkIdentity>().netId.Value;
Destroy(go, 5.0f);
}

void OnTriggerEnter2D(Collider2D col)


{
if(col.gameObject.tag == "vie")
{
GetComponent<Vie>().vie = 3;
Destroy(col.gameObject);
}
if(col.gameObject.tag == "arme")
{
bullet = bullet2;
Destroy(col.gameObject);
}
}
}

Dans ce chapitre, nous avons vu comment :

crer des objets ramassables ;


grer la collision avec ces objets ;
modifier certains paramtres au cours de jeu.

page54

customer 507877 at 2016-01-21


507877 23:38:34 +0100
6
Dcouverte de iTween
iTween est un plug-in gratuit trs populaire pour Unity. Il permet de raliser des anima-
tions et transitions par script trs facilement, en une seule ligne de code. Connatre iT-
ween vous permettra d'ajouter une corde votre arc de comptences et d'tre plus
l'aise lorsque vous utiliserez d'autres plug-ins Unity.

Je vous invite importer iTween dans la totalit de vos projets car les fonctions qu'il
propose sont trs utiles et trs simples utiliser. Dans ce chapitre, je vous en prsenterai
quelques-unes, que vous aurez ensuite l'occasion d'utiliser de nombreuses reprises
dans vos futurs projets. Je m'appuierai sur la documentation officielle du plug-in pour
les exemples de syntaxe. Nous utiliserons iTween pour ajouter des ennemis notre jeu
au chapitre suivant.

Tlchargez et importer iTween depuis l'Asset Store.


Note > Il n'est pas ncessaire de dclarer le script iTween dans l'en-tte de vos scripts. Lorsque iTween
est dans votre dossier Plugins, vous pouvez directement utiliser ses fonctions n'importe o dans votre
code.

6.1. Comment fonctionne iTween ?


iTween permet de raliser normment d'animations et de transitions. Que ce soit sur la
position, la couleur, le son, la camra, la taille, la rotation, ce petit script permet d'agir
sur de nombreux composants. Par exemple, la fonction MoveTo permet de dplacer un
objet d'un point A un point B. Pour cela, vous avez deux solutions :

soit avec une ligne de code :

iTween.MoveTo(gameObject,Vector3(10,0,0),5);

Celle-ci permet de dplacer le GameObject vers un vector 3 spcifi pendant


une dure dtermine, ici 5 secondes.
soit avec un HashTable, qui permet de prciser une liste de paramtres, dont vous
trouverez la liste dans la documentation de la fonction.

page55

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Hashtable ht = new Hashtable();


ht.Add("position",new Vector3(10,0,0));
ht.Add("time",5.0f);
iTween.MoveTo(gameObject,ht);

Le rsultat sera le mme mais le HashTable vous offre la possibilit d'ajouter ou non des
options et de les mettre dans l'ordre de votre choix.
iTween propose galement plusieurs types d'interpolations. En effet, les mouvements ne
sont pas forcment tous linaires. Vous pouvez ainsi en crer des plus complexes comme
des mouvements de rebond, d'lastique, de ping pong, etc. Vous retrouverez tous les
mouvements possibles dans la documentation aux entres LoopType et EaseType. Petit
exemple :

ht.Add("looptype",iTween.LoopType.pingPong);

iTween intgre un systme de callbacks qui permet d'appeler une mthode avant, pen-
dant ou aprs un tween. Un tween est un mouvement. Ce mouvement a une dure et
nous pouvons dclencher une fonction un instant donn de celui-ci, c'est le rle des
callbacks. Cela vous permet d'excuter une action un moment prcis de l'animation.
Les trois callbacks proposs sont onstart (au dbut), onupdate (pendant), oncomplete
(aprs). Voil un exemple :

ht.Add("oncomplete","finAnimFunction");

Ici lorsque l'animation se termine, la fonction finANimFunction est appele.


Enfin, vous pouvez utiliser certaines fonctions comme iTween.Stop(); pour stopper tous
les tweens ou un tween en particulier si vous ne voulez pas aller au bout de celui-ci.
Vous disposez galement des mthodes Pause, Resume, Init... Je vous invite consulter
la documentation pour plus dtails sur toutes ces fonctions.

6.2. Transition sur la couleur


Nous allons commencer par crer une animation sur la couleur d'un cube. Pour cela,
commencez par crer un cube et attribuez-lui un Material avec une couleur blanche (clic
droit sur la fentre projet, slectionnez CREATE/MATERIAL , puis faites glisser le Material cr
sur le cube). Crez un nouveau script que vous allez placer sur le cube. Pour modifier la
couleur de ce cube, il existe deux mthodes : ColorTo permet de colorer le cube dans la
couleur de votre choix ; ColorFrom permet de colorer le cube et de revenir la couleur
d'origine. Voici par exemple comment fonctionne ColorTo :

page56

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

void Start () {
iTween.ColorTo(this.gameObject, Color.red, 5);
}

Note > Nous avons plac notre code dans la fonction Start pour qu'il s'excute au lancement du jeu.
Mais vous pouvez placer votre fonction ColorTo ainsi que toutes les fonctions d'iTween dans n'importe
quelle fonction standard ou non de Unity.

Cette fonction indique que le cube blanc doit devenir rouge et que la transition aura
une dure de 5 secondes. Ceci nous donne le rsultat de la Figure 6.1.

Figure6.1 : Transition couleur

Vous pouvez galement crer un hashtable plus complexe pour interagir sur le type de
transition :

Hashtable ht = new Hashtable();


ht.Add("looptype","loop");
ht.Add("time",5.0f);
ht.Add("easetype","easeInOutBounce");
iTween.ColorFrom(this.gameObject, ht);

Permet de demander iTween d'animer de faon continue notre cube (loop =


boucle).

easetype indique comment nous souhaitons que l'animation se fasse. L'animation


peut tre linaire, exponentielle, sinusoidale... Il existe normment de types diff-
rents (vous en trouverez la liste dans la documentation d'iTween).

Permet d'indiquer que le cube doit aller du blanc vers le rouge puis redevenir
blanc.

page57

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

6.3. Regarder un GameObject


Maintenant vous allez dcouvrir comment faire en sorte qu'un GameObject regarde un
autre GameObject. Pour raliser cela, nous allons avoir besoin de la fonction LookTo
qui s'utilise de la faon suivante :

LookTo(objetQuiRegarde, vector3ARegarder, temps);

Vous pouvez galement dclarer un hashtable l'intrieur de la fonction :

iTween.LookTo(this.gameObject, iTween.Hash("looktarget",
target.transform.position, "axis", "y"));

6.4. Dplacer un GameObject


La fonction MoveTo permet de dplacer un GameObject comme nous l'avons vu dans
la prsentation d'iTween. Voil un autre bout de code montrant le fonctionnement de
cette mthode :

iTween.MoveTo (gameObject, iTween.Hash ("position", new Vector3 (7.0f,


0.0f, -3.2f), "time", 3.0f, "oncomplete", "setPosAndSpeed"));

Dans cet exemple nous dplaons le GameObject vers une position donne, le mouve-
ment durera 3 secondes et la fin, lorsque le mouvement est termin, la fonction (call-
back) setPosAndSpeed est appele. Cette fonction a t invente pour l'exemple, vous
pouvez appeler n'importe quelle fonction de la mme faon.

6.5. Un coup de punch !


iTween propose plusieurs fonctions prfixes par "Punch". Celles-ci permettent de crer
une animation rapide comme si une force s'appliquait l'objet. Je vous invite tester
deux d'entre elles, PunchRotation et PunchScale, pour dcouvrir ce que cela donne :

void Start () {
iTween.PunchRotation(this.gameObject, new Vector3(50, 10,0), 3);
iTween.PunchScale(this.gameObject, new Vector3(2, 2,2), 2);
}

Cette animation donnera l'impression que le cube se prend un coup, qu'il s'loigne et
revient. Ce type d'animation est parfait par exemple dans un jeu de combat.

page58

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

6.6. Appliquer une rotation


De nombreuses fonctions vous permettent d'appliquer une rotation au cours du temps
vos objets :

RotateUpdate(GameObject target, Vector3 rotation, float time);

6.7. Modifier la taille


Si vous crez un jeu avec un personnage qui mange des objets et qui devient plus grand
aprs avoir mang ces objets, vous pouvez utiliser la fonction ScaleTo :

iTween.ScaleTo(this.gameObject, new Vector3(transform.localScale.x * 2,


transform.localScale.y * 2, transform.localScale.z * 2), 1);

Ou encore, la fonction ShakeScale permet de faire la mme chose mais avec une ani-
mation plus complexe et plus labore.

6.8. Pour aller plus loin


Cette liste de fonctions n'est pas exhaustive, iTween contient d'autres fonctionnalits que
vous pouvez dcouvrir dans la documentation officielle. Cette premire approche du
plug-in vous permettra de mieux le prendre en main et de le matriser plus rapidement.
Une fois familiaris avec les hash, vous serez en mesure de crer des tweens complexes
et sophistiqus !
Afin d'illustrer en pratique ce que nous venons de voir, nous allons crire un tout petit
script qui aura pour but d'animer les curs de la barre de vie de notre personnage pour
crer un effet de cur qui bat. Notre script sera extrmement simple. Nous allons utiliser
la fonction ScaleTo d'iTween et passer en paramtre une HashTable dans laquelle nous
donnerons les informations relatives l'animation. Voil le code complet permettant de
crer l'animation de cur qui bat :

using UnityEngine;
using System.Collections;

public class AnimHeart : MonoBehaviour {

void Start () {
iTween.ScaleTo(this.gameObject, iTween.Hash(
"x",1.6f,
"y",1.6f,

page59

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

"z",1.6f,
"time",0.5f,
"easetype","easeInOutCirc",
"looptype","loop"
));
}

Vous pouvez modifier ce script l'envie pour personnaliser totalement votre animation
si vous le souhaitez.

Dans ce chapitre, vous avez vu comment :

importer iTween ;
utiliser iTween ;
crer des transitions par script.

page60

customer 507877 at 2016-01-21


507877 23:38:34 +0100
7
Ajout des ennemis
Jusqu' maintenant, nous avons dvelopp toutes les fonctionnalits relatives au game-
play ou aux actions ralisables par notre personnage. Notre projet est fonctionnel et le
cur du jeu est prt, cependant il manque cruellement d'intrt. Notre jeu doit proposer
un challenge au joueur pour qu'il ait envie de jouer. Nous allons par exemple proposer
un mode Survie dans lequel il doit liminer des ennemis rencontrs dans le niveau. Nous
aurions pu galement proposer un mode multijoueur en ligne afin qu'il puisse se mesu-
rer d'autres joueurs. Ce mode sera implment dans le module IV. Rseau et mode
multijoueur de notre srie de livres ddie Unity.
Cette deuxime option est certes plus stimulante pour le joueur, mais nous devons quand
mme prvoir un mode alternatif pour qu'il puisse galement jouer seul. Un jeu ne peut
disposer que du mode multijoueur.
Dans ce chapitre, nous allons donc ajouter un peu de challenge en crant des ennemis
tuer.

7.1. Ajout d'un ennemi


Nous allons commencer par crer un premier ennemi que nous transformerons ensuite
en prefab. Nous procderons quasiment de la mme faon que pour le personnage.
Rendez-vous dans le dossier COMPLETED/PREFABS du projet que nous avons tlcharg.
Vous y trouverez un prefab nomm Enemy1. Placez-le sur la scne pour le configurer.
Il se peut que la texture ne soit pas applique par dfaut sur le prefab. Si c'est le cas,
ajoutez simplement la mme texture que nous avons utilise pour notre personnage.
L'Animator se trouvant sur le prefab se chargera d'afficher la texture correspondant
l'ennemi.
Note > Depuis la version 4 de Unity, vous avez la possibilit d'utiliser une grande image contenant
plusieurs sprites. Elle pourra contenir par exemple des dizaines d'images reprsentant un personnage
dans plusieurs positions. Cela est utilis pour l'animation de personnages 2D. C'est cette technique qui a
t utilise dans le projet que nous avons tlcharg. Toutes les textures sont regroupes dans une mme
grande image, c'est pourquoi j'ai utilis la mme texture pour notre personnage et pour les ennemis.
En fait, c'est l'Animator se trouvant sur le personnage qui va se charger d'associer la bonne texture au
personnage.

page61

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Ajoutez galement la barre de vie votre ennemi en copiant/collant celle se trouvant sur
le personnage. Une fois fait, ajoutez le script Vie l'ennemi et configurez les variables
avec les bons paramtres en vous inspirant de ce que nous avons fait sur le personnage.
Modifiez galement le tag de l'ennemi afin de lui attribuer le tag Player pour la gestion
des collisions avec les projectiles.

Toutes ces tapes devraient vous tre familires car nous les avons dj ralises sur
le GameObject du personnage. Normalement, vous devriez avoir un ennemi configur
comme sur la Figure 7.1.

Figure7.1 : Prparation du prefab de l'ennemi

C'est tout ce que nous avons faire pour le moment. Nous pouvons maintenant crer
un script propre l'ennemi afin de lui attribuer un comportement.

7.2. Cration du script de l'ennemi


Le comportement de notre ennemi sera simple, il se dplacera de gauche droite sur
une plateforme. Nous allons utiliser iTween pour grer son dplacement et nous allons
faire en sorte que notre script puisse tre utilis diffremment par chaque ennemi.

Crez un script Ennemi et placez-le sur l'ennemi. Ouvrez le script et ajoutez les quatre
variables suivantes, correspondant la position et la vitesse de l'ennemi. Elles nous
permettront de crer son mouvement l'aide d'iTween.

page62

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

public int x;
public int y;
public int z;
public int speed;

Note > Comme notre jeu est en 2D, l'axe des z (profondeur) ne nous sera pas vraiment utile ici, sa valeur
restera 0. J'ai quand mme introduit la notion de profondeur dans ce script pour que vous puissiez
l'adapter vos autres projets. Ici, l'axe z n'a simplement pas d'effet.

Nous allons utiliser la fonction MoveTo d'iTween pour crer le mouvement.

void Start () {

iTween.MoveTo(this.gameObject, iTween.Hash(
"x", x,
"y", y,
"z", z,
"time", speed,
"easetype", iTween.EaseType.linear,
"looptype", iTween.LoopType.pingPong
));
}

Notre personnage se dplacera donc en boucle (car nous utilisons LoopType.pingPong)


de son point de dpart vers les coordonnes x, y, z que nous avons spcifies et la
vitesse speed donne. easeType, quant lui, permet de crer un mouvement linaire,
donc aucune acclration ou dclration pendant le mouvement.
Sur la scne, placez votre ennemi gauche d'une plateforme comme cela :
Figure7.2 : Positionnement de l'ennemi

page63

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Attribuez ensuite des valeurs vos variables. x correspond au mouvement horizontal.


Si votre plateforme a une longueur de 8 units et que votre personnage se trouve
x=2, la valeur de x (du script Ennemi) doit tre 10 (2+8) afin que l'ennemi puisse se
dplacer jusqu'au bout de la plateforme. y correspond la hauteur laquelle se trouve
votre ennemi sur la plateforme et z est en gnral gal 0 car cela correspond la
profondeur. Si vous avez dessin votre niveau en profondeur 1, vous attriburez la valeur
1 z. Pour la variable speed vous pouvez mettre ce que vous voulez mais 7 secondes
est une bonne valeur. Voil ce que j'obtiens dans mon cas :

Figure7.3 : Configuration du script Ennemi

Vous pouvez tester et crer un prefab pour enregistrer votre travail. Vous pouvez ensuite
dupliquer l'ennemi afin d'en crer plusieurs rpartis sur tout le niveau. Pensez modifier
les valeurs des variables du script Ennemi afin que chaque ennemi ait un comportement
unique.

Figure7.4 : Aperu d'un ennemi

7.3. Dernires retouches


Ce chapitre me permet de vous donner quelques exemples de challenges que vous pou-
vez proposer au joueur. Ici nous avons cr des ennemis mais vous pouvez galement
crer des cibles ou des objets casser. Vous pouvez mettre en place le mode de jeu
que vous voulez.

page64

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Afin d'aller un peu plus loin avec le mode Survie, nous allons juste rendre nos ennemis
un peu plus dangereux. Le principe est simple, nous devons faire en sorte que le joueur
perde de la vie s'il est touch ou s'il heurte un ennemi par mgarde.

Pour raliser cela, vous devez retourner dans le script Joueur et utiliser la fonction
OnCollisionEnter2D pour dtecter la collision entre le joueur et l'ennemi. Si le joueur
se cogne un monstre, vous diminuez sa vie. Le code est presque le mme que celui que
nous avons utilis pour ramasser les objets ( la diffrence prs que nous utilisons ici
OnCollisionEnter2D et non OnTriggerEnter). Voil ce que vous devez ajouter :

void OnCollisionEnter2D(Collision2D col)


{
if(col.gameObject.tag == "Player")
{
GetComponent<Vie>().vie -= 1;
}
}

Note > Pour rappel, la fonction OnCollisionEnter2D se dclenche lorsqu'il y a collision entre deux
objets "solides". OnTriggerEnter2D se dclenche quant elle lorsqu'un objet solide rentre dans un
objet non solide (lorsque le Collider est en IS TRIGGER).

Maintenant le joueur perdra de la vie s'il heurte un monstre. Vous pouvez rendre le jeu
plus difficile en crant un mouvement alatoire ou en faisant en sorte que l'ennemi suive
le joueur (voir Cas pratique Des cubes qui vous suivent).

Une autre fonctionnalit possible serait de donner la possibilit votre ennemi de tirer
sur le joueur. Pour cela une simple fonction Instantiate fera l'affaire.

Autre option : vous mettez en place un systme tel que celui que l'on retrouve dans le jeu
Bomber Man. Vous faites en sorte que votre ennemi cre des bombes l o il marche
afin que le joueur se fasse toucher s'il s'approche trop prs. Pour raliser cela, vous
pouvez utiliser le systme que nous avons mis en place pour les objets ramasser :

using UnityEngine;
using System.Collections;

public class Ennemi : MonoBehaviour {

public int x;
public int y;
public int z;
public int speed;
public GameObject bomb;

void Start () {

page65

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

iTween.MoveTo(this.gameObject, iTween.Hash(
"x", x,
"y", y,
"z", z,
"time", speed,
"easetype", iTween.EaseType.linear,
"looptype", iTween.LoopType.pingPong
));
InvokeRepeating("Spawn", 3, 3);
}

void Spawn ()
{
GameObject go = (GameObject)Instantiate(bomb, transform.position,
transform.rotation);
}

Nous dclarons notre nouvel objet bomb.

Nous appelons la fonction Spawn toutes les 3 secondes.

Nous instancions une bombe la position de l'ennemi.

Et l'objet BOMB serait un objet qui s'autodtruirait au bout de deux secondes :


Destroy(this.gameObject);. Si le joueur touche la mine pendant sa dure de vie,
celle-ci le blesse en lui faisant perdre un point de vie. Le code suivant peut donc se placer
dans le script de collision du joueur :

if(col.gameObject.tag == "Mine")
{
GetComponent<Vie>().vie -= 1;
Destroy(col.gameObject);
}

Ces petites astuces vont vous permettre de rendre vos ennemis beaucoup plus dange-
reux et ainsi de proposer un rel challenge au joueur. Pensez crer plusieurs types
d'ennemis avec des pouvoirs diffrents afin de varier les plaisirs.

Dans ce chapitre, vous avez vu comment :

ajouter des ennemis votre jeu ;


programmer un mouvement avec iTween ;
rutiliser des composants.

page66

customer 507877 at 2016-01-21


507877 23:38:34 +0100
8
Utilisation dune manette de jeu
(joystick)
Certains joueurs naiment pas utiliser le clavier et la souris et prfrent jouer avec une
manette, mme sur PC. Via le port USB de l'ordinateur, il est possible de brancher des
manettes de xBox, PS4, FreeBox ou encore un controller achet en ligne. Cest pourquoi
nous allons leur permettre dutiliser leur manette pour contrler leur personnage. Ainsi
notre jeu sera aussi bien compatible avec le clavier quavec les joysticks.

8.1. Fonctionnement des joysticks


Comme pour le clavier ou la souris, les manettes produisent des vnements de type
Input lorsquon les utilise. Les joysticks ont des boutons standards mais galement des
boutons sous les pouces permettant dindiquer une direction (axes). Unity peut grer
jusqu vingt boutons en plus des axes. Pour identifier quel bouton a t press, vous
pouvez utiliser le test suivant :

if(Input.GetKeyDown("joystick button 0")){//btn0}


if(Input.GetKeyDown("joystick button 1")){//btn1}

Si plusieurs joysticks sont branchs, vous pouvez faire ceci :

if(Input.GetKeyDown("joystick 1 button 2")){// J1 btn 2}


if(Input.GetKeyDown("joystick 2 button 2")){// J2 btn 2}

Note > Pour rappel, l'vnement est appel tant que la touche est enfonce pour GetKey alors qu'il ne
l'est qu'une seule fois pour GetKeyDown. Dans notre cas, nous voulons savoir si le joueur a appuy
sur un bouton pour par exemple sauter, aussi nous utilisons GetKeyDown car l'vnement doit se
dclencher une seule fois. GetKey sera utile par exemple pour le dplacement. En effet, le personnage
doit se dplacer tant que la touche est enfonce.

Pour grer les axes (la direction), vous pouvez utiliser la commande GetAxis, qui fonc-
tionne prcisment avec les boutons des manettes se trouvant sous le pouce :

float translation = Input.GetAxis("Vertical") * speed;

page67

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

float rotation = Input.GetAxis("Horizontal") * rotationSpeed;

8.2. Dboguer les joystiks


Comme chaque manette est diffrente, il peut tre complexe de savoir quel bouton a t
utilis. Bien que les constructeurs essayent de respecter une norme et de saccorder, il
s'avre souvent utile dafficher le nom du bouton press lorsque vous dveloppez votre
jeu. Par exemple, pour lister lensemble de manettes connectes, vous pouvez utiliser
cette fonction :

void Awake() {
string[] names = Input.GetJoystickNames();
Debug.Log("Connected Joysticks:");
for(int i=0; i < names.Length; i++) {
Debug.Log("Joystick" + (i + 1) + " = " + names[i]);
}
}

Ce petit bout de code affichera dans votre console l'historique des boutons appuys ce
qui est trs utile pour dboguer le jeu.
Pour tester tous les vnements (boutons presss), vous pouvez crer une fonction ap-
pele dans la fonction Update. Par exemple :

void Update() {
DebugLogJoystickButtonPresses();
}

void DebugLogJoystickButtonPresses() {
int joyNum = 1;
int buttonNum = 0;
int keyCode = 350;

for(int i = 0; i < 60; i++) {

if(Input.GetKeyDown(""+keyCode+i)) Debug.Log("Pressed! Joystick "


+ joyNum + " Button " + buttonNum + " @ " + Time.time);

buttonNum++;

if(buttonNum == 20) {
buttonNum = 0;
joyNum++;
}
}
}

Ce script affichera dans la console le nom du bouton utilis.

page68

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

8.3. Configurer manuellement les boutons


Vous pouvez configurer vous-mme vos manettes l'aide du menu EDIT/PROJECT SETTINGS/
INPUT. Dans cette fentre, vous pouvez ajouter des boutons et les paramtrer, ce qui vous
facilitera le travail par la suite. Les joysticks sont pris en compte par dfaut. Voil par
exemple comment associer un joystick laxe horizontal :

Figure8.1 : Input manager

Ici nous associons laxe des x du joystick X-axis. La valeur de DEAD permet de dfinir la
valeur minimale en dessous de laquelle le mouvement doit tre mis zro. Comme vous
le savez, pour vous dplacer avec un joystick, vous devez pencher le bouton sous votre
pouce plus ou moins fort. Si vous poussez trs peu le bouton (ici une valeur infrieure
ou gale 0.2), cela sera considr comme nul.

page69

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

8.4. Modification de notre jeu pour grer les manettes


Nous allons maintenant voir comment mettre jour notre code pour prendre en compte
une manette de jeu. Ouvrez le script Joueur et compltez vos tests avec celui du joystick.
Par exemple, pour faire marcher le personnage vers la gauche lorsque le joueur pousse
le bouton vers la gauche, vous aurez :

if(Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.LeftArrow) ||
Input.GetAxis("Horizontal") < 0)

Pareil pour la droite :

else if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow) ||


Input.GetAxis("Horizontal") > 0)

Pour le bouton de saut, vous pouvez par exemple utiliser le bouton 0 de la manette :

if(Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown("joystick 1
button 0"))

Vous pouvez faire cela pour toutes vos fonctions en utilisant les boutons de votre choix.
Le script sera relativement simple car il ny a que cinq actions grer : Aller gauche
- Aller droite - Sauter - Tirer - Viser.

Pour le viseur, vous pouvez utiliser les axes, par exemple le bouton se trouvant sous le
pouce droit (celui de gauche tant attribu au mouvement). Vous pouvez modifier la
position du viseur si le joueur bouge le bouton droit. Enfin, sachez qu'il est possible de
grer plusieurs axes avec quelques tests comme ceux-ci :

if(Input.GetAxisRaw("X axis")> 0.3|| Input.GetAxisRaw("X axis") < -0.3)


{
}

if(Input.GetAxisRaw("Y axis")> 0.3|| Input.GetAxisRaw("Y axis") < -0.3)


{
}

if(Input.GetAxisRaw("3rd axis")> 0.3|| Input.GetAxisRaw("3rd axis") <


-0.3)
{
}

if(Input.GetAxisRaw("4th axis")> 0.3|| Input.GetAxisRaw("4th axis") <


-0.3)
{

page70

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

}
//

Si vous disposez de quatre axes diffrents, vous pouvez par exemple en consacrer deux
au dplacement et deux pour modifier l'orientation de la camra afin que le joueur
puisse regarder dans toutes les directions.

Votre jeu est maintenant compatible avec une manette de jeu. Nhsitez pas utiliser le
script de debug pour configurer les touches si vous avez du mal les attribuer. Consul-
tez galement Internet, de nombreux plug-ins existent et vous permettent de grer les
manettes dans Unity.

Dans ce chapitre, vous avez vu comment :

utiliser une manette de jeu ;


mettre jour un script ;
rendre compatible un jeu avec une manette ;
dbuger les boutons d'une manette.

page71

customer 507877 at 2016-01-21


507877 23:38:34 +0100
9
Publier son jeu
Lorsque votre jeu est termin, le but est de le publier afin de le faire connatre par de
nombreux joueurs. Il existe de nombreuses plateformes de vente sur lesquelles vous
pouvez le proposer. Dans ce chapitre, je vais vous prsenter quelques plateformes trs
populaires.

9.1. Compilation du jeu


Avant de publier votre jeu, vous allez devoir le compiler. Rappelons que la compilation
permet de regrouper tous les lments qui le composent et crer un excutable que les
utilisateurs pourront ouvrir pour le lancer.

Pour compiler votre jeu, rendez-vous dans le menu FILE/BUILD SETTINGS et ajoutez toutes
les scnes de votre jeu. Slectionnez ensuite la plateforme cible pour crer le build
appropri. Chaque plateforme de vente peut vous demander un build diffrent.

Figure9.1 : Build settings

Vous pouvez configurer votre jeu dans les PLAYER SETTINGS (nom, diteur, rsolution, qua-
lit, icne, etc.).

page72

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure9.2 : Player settings

Puis cliquez sur le bouton BUILD afin de le compiler et de gnrer un excutable.

9.2. Publication sur Steam


Steam est certainement la plateforme internationale de vente de jeux dmatrialiss la
plus connue au monde. Pour publier sur Steam, il faut dj que votre jeu soit de qualit
et original. La concurrence est rude et les jeux de mauvaise qualit ny ont pas leur
place. La faon la plus facile dtre publi sur Steam, lorsquon est un dveloppeur
indpendant, cest de passer par Greenlight.

Steam Greenlight est une plateforme Steam sur laquelle tous les dveloppeurs peuvent
publier un jeu afin que la communaut (les joueurs) puisse voter et soutenir un projet. Si
votre jeu plat et quil obtient suffisamment de votes, il sera valid et pourra tre publi
sur Steam. Pour soumettre votre jeu, cliquez sur SOUMETTRE VOTRE PRODUIT.

page73

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure9.3 : Steam Greenlight

Il y a deux faons de prsenter votre produit. Soit il sagit dun concept ou dun prototype
et vous pouvez cliquer sur SOUMETTRE CONCEPT pour crer une fiche produit gratuitement,
soit votre projet est un projet termin et srieux et il faudra vous rendre dans SOUMETTRE
UN ARTICLE. Soumettre un article implique que vous ayez un compte Greenlight, ce qui
vous cotera 90 . En change, vous pourrez soumettre vos projets. Sachez que largent
est entirement revers une organisation caritative.

Dans notre cas, nous allons voir comment soumettre un concept (gratuit). Vous pouvez
crer une fiche produit en saisissant les informations suivantes : le titre et limage de votre
projet.

Figure9.4 : Crer une fiche produit Steam Greenlight

On vous demandera de saisir une description et de slectionner les langues du jeu.


Appliquez-vous pour la description afin de mettre toutes les chances de votre ct. Par la
suite, vous aurez la possibilit denvoyer des images et vidos. Mettez-en plusieurs pour
bien montrer votre jeu aux joueurs. Lorsque votre fiche produit est termine et valide,
votre projet sera en ligne et les internautes pourront vous soutenir. Voil la page produit
de lun des jeux que jai ralis :

page74

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure9.5 : Projet Steam Greenlight

Vous pourrez crire des annonces, parler avec les joueurs, partager des liens (dmo,
Facebook, site) et rcolter normment dinformations qui vous seront utiles.

Figure9.6 : Commentaires Steam Greenlight

page75

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

9.3. Publication sur dautres plateformes


Vous pouvez galement publier votre jeu sur dautres plateformes afin de toucher plus
de monde. Kongregate est une plateforme ddie aux jeux. C'est un site trs populaire
et de nombreux joueurs verront votre jeu. Ils pourront y jouer, le commenter, voter, etc.

Figure9.7 : Kongregate

Comme pour Steam, vous serez amen publier des images, une description et votre
excutable. Votre jeu sera ensuite disponible.

Facebook est galement une plateforme sur laquelle vous pouvez publier des projets,
cependant leur politique de scurit a chang et ils nacceptent que les jeux publis sur
des sites ayant un protocole https valide. Quand vous crez une application Facebook
vous pouvez donner le lien vers votre projet compil en Web Player se trouvant sur votre
serveur.

La manipulation nest pas complexe mais sans protocole https votre application ne fonc-
tionnera pas. Sachez que pour avoir un protocole https sur votre serveur, il faudra sous-
crire une option payante (achat d'un certificat SSL) auprs de votre hbergeur.

page76

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Figure9.8 : Jeu Facebook

Une autre solution consiste publier votre jeu sur votre propre site web. Beaucoup de
studios dveloppent des sites pour leurs jeux et proposent aux internautes de tlchar-
ger un fichier ZIP contenant l'excutable du jeu. Cette solution vous permet dtre auto-
nome et de ne dpendre daucune plateforme. Linconvnient est que vous toucherez
beaucoup moins de joueurs. Le mieux est dtre prsent sur un maximum de plateformes.

Dans ce chapitre, vous avez vu comment :

compiler votre jeu ;


publier votre jeu sur Steam ;
publier votre jeu sur Facebook, Kongragate ;
faire connatre votre jeu au monde entier.

page77

customer 507877 at 2016-01-21


507877 23:38:34 +0100
10
Financer son projet
Maintenant que vous avez plus d'exprience, vous allez avoir de nombreux projets en
tte. Les dveloppeurs indpendants ont des moyens trs limits et parfois insuffisants
pour financer un projet qui pourtant pourrait avoir un franc succs. Il va donc falloir vous
trouver un moyen de financer votre jeu pour pouvoir en crer de nouveaux.

10.1. Le financement participatif


Le financement participatif sest dmocratis ces dernires annes et de nombreux pro-
jets ont pu voir le jour grce ce canal de financement. La plateforme la plus populaire
dans le domaine est KikStarter. En France, nous avons une plateforme qui commence
grandir : Ulule. Le fonctionnement est le mme pour ces deux plateformes. Le principe
est simple, vous prsentez votre projet, vos objectifs, vos ambitions, et les internautes ont
la possibilit de vous donner de largent sils aiment votre travail.
Pour qu'une campagne de financement fonctionne, vous devez fournir normment de
dtails. Vous devez dcrire le projet, parler de lquipe, expliquer ce quil reste faire,
etc. Vous devez montrer des images, des vidos, un prototype. Pour obtenir un finance-
ment de la part des internautes, votre projet doit avoir dmarr et tre un stade de
dveloppement suffisamment avanc pour que les internautes puissent se projeter. Votre
projet doit donner envie, sinon vous ne rcolterez rien.
Le mode de fonctionnement de ces plateformes de financement est simple : vous deman-
dez une certaine somme dargent en indiquant exactement quoi elle va servir. Si vous
demandez 50 000 , vous devez justifier ce montant. De plus, vous devez faire attention
ne pas tre trop gourmand car si vous natteignez pas la somme demande, la cam-
pagne sera annule et vous ne toucherez pas un centime. Par contre, si vous rcoltez
plus, vous aurez le surplus. Par exemple, la console OUYA avait demand 900 000
et a obtenu prs de 10 millions deuros.
Vous devez bien garder l'esprit que la plateforme de financement prlvera un pour-
centage (8 %) sur la somme rcolte. De plus, vous devez mettre en place des contre-
parties. Les internautes ayant financ votre projet doivent tre rcompenss si le finance-
ment est russi. La rcompense sera diffrente (proportionnelle) selon la somme verse.
Par exemple, si linternaute donne 5 , vous mettrez son nom dans les crdits du jeu. S'il

page78

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

donne 20 , il recevra une copie du jeu sa sortie et aura son nom dans les crdits.
Celui qui donne 100 sera invit au restaurant par vous-mme et vous lui remettrez
en main propre son exemplaire du jeu, etc. Vous tes totalement libre de dfinir vous-
mme les rcompenses que vous souhaitez accorder aux utilisateurs ayant particip au
financement de votre projet. Les frais de ces contreparties (cot, expdition, commission,
transactions paypal, etc.) doivent aussi tre pris en compte dans votre budget. Si vous
avez besoin de 10 000 , demandez 15 000 afin de couvrir tous ces cots. Toutes
ces donnes doivent tre calcules avec minutie avant de vous lancer.
Je vous invite consulter attentivement la campagne de financement de la console
OUYA, qui a eu un franc succs malgr le flop de la console sa sortie. Regardez
comment est construite la page, les contreparties proposes, etc. Cela vous aidera
construire votre propre campagne de financement.

10.2. Cration de la page projet


Vous savez maintenant comment fonctionnent ces plateformes. Vous pouvez vous lancer
et crer une campagne de financement. Les Amricains tant beaucoup plus ouverts ce
type de financement, vous aurez plus de chance de russir si votre page est entirement
rdige en anglais. Crez un nouveau projet. On vous demandera de donner un titre,
une description, des images, une catgorie, etc. pour prsenter votre travail.

Figure10.1 : Page projet Ulule

page79

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

La cration d'une page est assez rapide mais vous devez faire trs attention fournir
un maximum de renseignements. Justifiez vos choix, prcisez vos objectifs, expliquez
comment vous comptez les atteindre.
Comprenez bien que vous demandez de largent des inconnus et qu'ils n'en donneront
pas sils ne savent pas ce que vous allez en faire. De plus sils ont des doutes sur la
viabilit de votre projet, ils ne le financeront pas, alors montrez des vidos, images,
schmas Enfin, des contreparties allchantes donneront davantage envie de financer
votre projet. Je ne peux que vous conseiller de vous inspirer de campagnes qui ont
fonctionn.
Voici un autre exemple de campagne mene bien : le 3Doodler. Il sagit du premier
stylo 3D au monde.
Il existe des plateformes spcialement cres pour le financement de jeux vido. Par
exemple Square Enix, le studio qui a dvelopp Final Fantasy, a lanc sa propre plate-
forme de financement : Collective. Son principe est de proposer un jeu qui sera valu
par les joueurs. La slection est difficile, mais si votre jeu obtient suffisamment de votes,
il sera ligible pour une campagne de financement participatif. Sachez que Collective
est partenaire de KikStarter et que si votre jeu plat, Square Enix vous mettra en avant
et vous aurez de fortes chances de financer votre projet. Voil une autre success-story
(campagne soutenue par Square Enix) : le jeu Moon Hunters.

10.3. Dautres techniques de financement


Il est bien sr possible de financer votre projet autrement. Par exemple, si vous avez d-
velopp un jeu qui a march et que vous souhaitez faire une suite, vous aurez beaucoup
plus de facilits pour dmarcher des socits. Vous pouvez chercher des investisseurs,
des partenaires, des annonceurs, etc.
Une technique que vous pouvez mettre en place est de demander une socit de
financer une partie de votre projet et en change vous afficherez de la publicit pour
celle-ci dans votre jeu. Si vous avez dj dvelopp des jeux succs, les entreprises
auront confiance en vous et seront beaucoup plus ouvertes au financement de votre
projet.
Vous pouvez galement passer par le systme de prcommande qui est devenu trs
populaire. Le but est de vendre votre jeu avant mme la fin de son dveloppement. Vous
donnez la possibilit aux joueurs presss de commander votre jeu en amont afin de le
recevoir avant la sortie officielle ou davoir accs la bta ferme. Cela implique que
vous ayez commenc son dveloppement pour pouvoir prsenter des images ou une
dmo technique.

page80

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Ce sont l diffrents moyens qui vont vous permettre dobtenir de largent avant la fin
du dveloppent de votre jeu. Cela peut tre bien utile pour acheter des ressources gra-
phiques, des musiques, des serveurs, etc. Cela permet galement de tester si votre jeu
plaira. Si personne ne veut le financer, cest quil risque de ne pas fonctionner sa
sortie et quil nest pas ncessaire de terminer son dveloppement ; cela vous vite de
dvelopper entirement un jeu qui ne marchera pas. Cest la communaut qui dcidera
si votre jeu doit voir le jour ou pas. Pensez bien prendre en compte les avis des joueurs
afin de leur donner exactement ce quils veulent, ainsi vous mettrez toutes les chances
de votre ct.

Vous avez maintenant les cls en main pour russir dans le dveloppement de jeux !

Dans ce chapitre, vous avez vu comment :

financer votre jeu ;


crer une campagne de financement participatif ;
trouver des investisseurs.

page81

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Cas pratiques
Pour terminer, voici quelques mini projets pour mettre uvre et complter les connais-
sances acquises au fil des chapitres. Je vous invite d'abord essayer de les raliser par
vous-mme et ne lire que dans un second temps le code source fourni.

1. Cration d'un piano huit touches

L'objectif est de crer un piano compos de huit touches (do, r, mi, fa, sol, la, si et
do). Vous pouvez crer un piano en 2D ou en 3D. Lorsque l'utilisateur appuie sur une
touche de son clavier, le son associ cette touche doit se lancer. Les sons doivent
tre stocks dans une variable de type AudioClip.

1. Vous devez associer les touches du piano huit touches du clavier, par exemple
la touche A produit le son Do, la touche Z le son R, E le son Mi, etc.
2. Crez un texte avec le systme dUI. Ce texte sera modifi chaque fois quune
touche du piano sera touche. Si la touche Sol est utilise, le texte affichera
le mot Sol.

Commencez par crer votre piano. Vous pouvez utiliser des cubes pour le construire.
Ajoutez un AudioSource sur chaque cube afin que ceux-ci puissent produire un son.
Voil quoi ressemble mon piano fait en 2D :

Figure2 : Piano

page82

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Nous devons crer un script qui sera plac sur chaque touche et chaque touche aura des
valeurs uniques pour les variables. Voil le code qui permet de rpondre la demande :

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

public class Piano : MonoBehaviour {

public AudioClip note;


public Text texte;
public string nomTouche = "Do";
public KeyCode toucheClavier = KeyCode.A;

void Update()
{
if(Input.GetKeyUp(toucheClavier))
{
jouerSon();
}
}

void jouerSon()
{
GetComponent<AudioSource>().PlayOneShot(note);
texte.text = nomTouche;
}
}

J'ai donn des valeurs par dfaut mon script. Ici, la touche A est associe au son
Do. Les variables tant publiques, vous pourrez les modifier dans l'inspector afin
de dfinir quelle touche est relie tel son.

GetKeyUp permet de dtecter lorsque l'utilisateur relche la touche du clavier.


Nous aurions pu galement utiliser GetKeyDown, les deux solutions marchent mais
avec GetKkeyDown le son risque de se dclencher plusieurs fois en mme temps si
l'utilisateur maintient la touche appuy.

Cette instruction accde l'AudioSource et appelle la fonction PlayOneShot()


pour jouer un son.

Avec ce script vous pouvez choisir un son par touche et dfinir la touche du clavier
associ la note. Vous pouvez maintenant jouer du piano dans Unity !

page83

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

2. Jouons avec les prefabs

Ici nous allons crer un script qui permettra d'instancier des objets interactifs.

1. Crez une fonction qui instancie alatoirement un prefab sur la scne lorsque
lutilisateur appuie sur la touche Espace. Les prefabs instanciables doivent se
trouver dans un tableau de type GameObject[].
2. Les prefabs instancis doivent changer de couleur lors dun clic. Si le prefab
est vert il devient rouge et sil est rouge il devient vert. Au bout de dix clics, le
prefab devient noir et disparat si lon clique de nouveau dessus.

Pour cet exercice, vous devez crer des objets cliquables : ils doivent donc contenir
le script grant les clics sur eux. Vous aurez aussi besoin d'un autre script permettant
d'instancier les objets sur la scne.
Voici le script qui gre les instanciations :

using UnityEngine;
using System.Collections;

public class Exo2 : MonoBehaviour {

public GameObject[] objets;

void Update () {
if(Input.GetKeyUp(KeyCode.Space))
{
Instantiate(objets[Random.Range(0,objets.Length)], new
Vector3(0,0,0), Quaternion.identity);

}
}
}

Et le script qui gre les clics sur les objets :

using UnityEngine;
using System.Collections;

public class Exo2_2 : MonoBehaviour {

private bool isGreen = true;


private int nbClics = 0;

page84

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

void OnMouseUp()
{
nbClics++;
if(nbClics > 10){Destroy(this.gameObject);}

if(isGreen)
{
GetComponent<Renderer>().material.color = Color.red;
isGreen = false;
if(nbClics == 10){GetComponent<Renderer>().material.color =
Color.black;}
}
else{
GetComponent<Renderer>().material.color = Color.green;
isGreen = true;
if(nbClics == 10){GetComponent<Renderer>().material.color =
Color.black;}
}
}
}

Vous pouvez maintenant faire apparatre des objets avec la touche Espace et changer
leur couleur en cliquant dessus. Au bout de dix clics, l'objet s'autodtruit.

3. Ramasser des objets en fonction d'une variable

Nous allons crer un script qui permettra au joueur de ne ramasser que certains
objets.

1. Crez un script de collision que vous attacherez un FPS Character. Ce script


contiendra une variable int qui prendra une valeur alatoire comprise entre 1
et 4 au lancement du jeu.
2. En fonction du nombre obtenu, le joueur pourra ramasser certains objets. Par
exemple si le nombre tir est 2, le joueur pourra ramasser les objets bleus, si
cest 3, il pourra ramasser les objets rouges, etc. Vous pouvez utiliser le systme
de tags ou les noms des objets pour raliser le test de collision.

Dans ce cas pratique, on nous demande de tirer un nombre alatoire pour savoir quels
objets nous pouvons ramasser. Nous pouvons utiliser le systme de tags pour faire cela :

using UnityEngine;
using System.Collections;

page85

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

public class Exo3 : MonoBehaviour {

private int nbAleatoire;

void Start () {
nbAleatoire = Random.Range(1,4);
}

void OnCollisionEnter(Collision col)


{
if(col.gameObject.tag == "Tag"+nbAleatoire)
{
Destroy(col.gameObject);
}
}
}

Si le nombre est "2", nous pourrons ramasser les objets ayant un tag "Tag2". chaque
nouvelle partie, le tag sera diffrent.

4. Des cubes qui vous suivent

Vous devez crer une scne avec un FPS et plusieurs cubes. Les cubes ont un script
attach. Ils doivent avoir le comportement suivant :

1. Si le joueur est moins de 10 mtres du cube, ce dernier suit le personnage.


2. Si le joueur sloigne plus de 10 mtres, les cubes arrtent de le suivre.
3. Si le joueur est moine de 3 mtres du cube, le cube devient rouge.
4. Si le joueur touche un cube, le cube doit disparatre.

Dans ce cas pratique, nous devons crer un script qui va faire en sorte que les cubes
suivent le joueur si celui-ci est proche. Le cube (qui est pourrait tre l'ennemi) devient
rouge s'il est trs proche du joueur et disparat s'il touche le joueur. Voil le script crire :

using System.Collections;

public class Exo4 : MonoBehaviour {

public GameObject joueur;

void Update()
{

page86

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

if(GetDistance() < 0.9f)


{
Destroy(this.gameObject);
}

if(GetDistance() < 3)
{
GetComponent<Renderer>().material.color = Color.red;
}

if(GetDistance() < 10)


{
transform.LookAt(joueur.transform.position);
transform.Translate(Vector3.forward * Time.deltaTime * 1.5f);
}

public float GetDistance()


{
return Vector3.Distance(this.transform.position,
joueur.transform.position);
}
}

Nous utilisons donc une fonction GetDistance pour savoir quelle action raliser.

transform.LookAt demande un objet de regarder un autre objet. Cela nous


permet de faire en sorte que les cubes soient orients face au joueur.

Nous appliquons une translation afin de dplacer les cubes en direction du joueur.

Cette fonction nous renvoie la distance entre le cube et le joueur. Cela permet de
savoir si le cube est moins de 10 mtres pour appliquer la translation. Sinon, le
cube restera immobile.

5. Utilisation de l'acclromtre

Vous devez crer un projet pour mobiles (Android ou iOS). Le but est de crer une
boite dans laquelle vous placerez un cube. Le cube est quip dun Rigidbody et
subit donc la loi de la gravit. En fonction de lorientation de votre tlphone, la gra-
vit doit tre modifie. Vous devez utiliser la fonction Physics.gravity (voir la docu-
mentation) pour modifier le comportement de la gravit. Attention, dans les PLAYERS
SETTINGS, vous ne devez autoriser quune seule orientation de lcran, il ne doit pas
y avoir de rotation automatique de lcran.

page87

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Note > Dans le cas d'un jeu 2D, vous utiliserez Physics2D.gravity pour appliquer un comporte-
ment similaire.

Ce cas pratique est assez simple raliser si vous avez regard la documentation dans
la rubrique Physics. Nous pouvons modifier la gravit avec l'acclromtre comme cela :

using UnityEngine;
using System.Collections;

public class Exo5 : MonoBehaviour {

void FixedUpdate(){
Physics.gravity = 9.8f * Input.acceleration.normalized;
}

Si vous avez des objets avec un Rigidbody, ceux-ci tomberont dans la direction dans
laquelle votre tlphone est pench.
Note > Pour les tlphones rcents qui en sont quips, vous avez la possibilit d'accder au gyroscope
de l'appareil. Pour cela, il faudra utiliser Input.gyro. Par exemple, vous pouvez modifier la rotation
d'un objet en fonction du gyroscope de la faon suivante :

void Update() {
transform.rotation = Input.gyro.attitude;
}

Il est aussi possible de savoir si l'utilisateur secoue son tlphone et quelle force, pour cela, je vous
renvoie vers la fonction Gyroscope.userAcceleration.

6. Utilisation de la classe WWW

Crez un petit script C# qui rcuprera sur votre serveur le contenu d'un fichier texte.
Ce fichier texte contient deux informations spares par une virgule : le nom du joueur
et son niveau. Votre script associera ces informations deux variables.

Le but est donc de donner des valeurs des variables partir d'un texte contenu dans
un fichier texte en ligne. Nous allons donc utiliser WWW pour tlcharger le texte et
Split pour couper la chane de caractres :

page88

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

public string url = "http://www.VotreSite.fr/getVar.php";


public string pseudo;
public int niveau;

IEnumerator Start() {
WWW www = new WWW(url);
yield return www;
string texte = www.text;
string[] variables = texte.Split(',');
pseudo = variables[0];
niveau = int.Parse(variables[1]);
}

Le script permet de rcuprer la chane en ligne et de la dcouper afin de l'afficher


comme nous le souhaitons dans notre jeu. Les variables sont stockes dans un tableau.

7. Tlchargement d'un son sur le serveur

Le but est de crer un script qui sera capable de rcuprer un son sur votre serveur
afin de le jouer dans votre jeu Unity. Pour faire cela, vous pouvez passer par la classe
WWW.

Il est possible de tlcharger du texte mais galement des sons, des images ou des
vidos avec la classe WWW. Le principe est identique, voila un petit script d'exemple
qui rpond au problme :

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {


public string url;
public AudioSource source;
void Start() {
WWW www = new WWW(url);
source = GetComponent<AudioSource>();
source.clip = www.audioClip;
}
void Update() {
if (!source.isPlaying && source.clip.isReadyToPlay)
source.Play();

}
}

page89

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

Comme vous pouvez le constater, un son est plus long charger, c'est pourquoi nous
utilisons isReadyToPlay pour savoir s'il a t tlcharg entirement.

page90

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Liste des illustrations

1.1. Cration d'un nouveau projet 2D .......................................................... 5


1.2. Tlchargement d'un projet sur l'Asset Store ............................................ 5
1.3. Espace de travail .............................................................................. 6
1.4. Les prefabs que nous allons utiliser pour construire le niveau ....................... 6
1.5. Placement des prefabs ....................................................................... 7
1.6. Aperu global du niveau1 ................................................................. 7
1.7. Les composants des blocs du niveau ...................................................... 8
1.8. Activation du mode Sprite ................................................................... 9
1.9. Ajout du dcor ................................................................................. 9
1.10. Proprits du Sprite Renderer ........................................................... 10
1.11. Outil de gestion des calques ............................................................ 10
1.12. Ajout de quelques objets ................................................................. 11
1.13. Le niveau2 de notre jeu ................................................................. 12
1.14. Utilisation d'un personnage 2D et ses composants ................................. 13
1.15. Notre personnage 2D .................................................................... 14
2.1. Aperu de notre diteur de niveaux .................................................... 15
2.2. Notre onglet dans le menu ............................................................... 16
2.3. Les paramtres de la grille ................................................................ 19
2.4. Cration du script GridEditor ............................................................. 20
2.5. Plug-in en fonctionnement ................................................................. 23
3.1. Organisation du projet ..................................................................... 26
3.2. Paramtres du joueur ....................................................................... 29
3.3. Positionnement du viseur ................................................................... 30
3.4. Dplacement du viseur avec la souris .................................................. 31
3.5. Prparation du projectile .................................................................. 32
3.6. Tir d'un projectile ............................................................................ 35
4.1. Images de la barre de vie ................................................................ 38
4.2. Aperu de la barre de vie ................................................................ 39
4.3. Import des particules ....................................................................... 40
4.4. Configuration du script de vie ............................................................ 40
4.5. Barre de vie en fonctionnement .......................................................... 41
4.6. Cube de collision ........................................................................... 43
4.7. Configuration du cube de collision ...................................................... 44
4.8. Configuration du Trail Renderer .......................................................... 45
4.9. Aperu du Trail Renderer .................................................................. 45
4.10. Ajout d'un Audio Source ................................................................. 46

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

4.11. Script Joueur ................................................................................ 46


5.1. Les textures des objets ...................................................................... 48
5.2. Cration d'un prefab objet ................................................................ 49
5.3. Cration d'un objet vide ................................................................... 49
5.4. Configuration du script Spawner ........................................................ 51
5.5. Gestion du clic ............................................................................... 51
5.6. Le second projectile ........................................................................ 52
5.7. Configuration du script joueur ............................................................ 53
6.1. Transition couleur ............................................................................ 57
7.1. Prparation du prefab de l'ennemi ....................................................... 62
7.2. Positionnement de l'ennemi ................................................................ 63
7.3. Configuration du script Ennemi ........................................................... 64
7.4. Aperu d'un ennemi ......................................................................... 64
8.1. Input manager ................................................................................ 69
9.1. Build settings .................................................................................. 72
9.2. Player settings ................................................................................ 73
9.3. Steam Greenlight ............................................................................ 74
9.4. Crer une fiche produit Steam Greenlight ............................................. 74
9.5. Projet Steam Greenlight ................................................................... 75
9.6. Commentaires Steam Greenlight ........................................................ 75
9.7. Kongregate .................................................................................... 76
9.8. Jeu Facebook ................................................................................ 77
10.1. Page projet Ulule .......................................................................... 79
2. Piano .............................................................................................. 82

page92

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Index

A GetKey, 26, 67
GetKeyDown, 27, 67, 83
Acclromtre, 88
GetKeyUp, 83
AddForce, 27
Gravit, 88
Arrire-plan, 9
Greenlight, 74
Audio, 46, 82

B I
Box Collider 2D, 8 InvokeRepeating, 50
Build settings, 72 IsKinematic, 29
iTween, 55, 62
C
Calque, 10 J
Collider, 13 Joystick, 26, 67
lments dcoratifs, 10
Collision, 13, 36, 42, 44, 52, 85 K
Coroutine, 27 KikStarter, 78
Crowdfunding, 78 Kongregate, 76

D L
Dcor, 8, 11
Layer, 10
Dplacer un personnage, 26
Lumire, 44
E
diteur de niveaux, 15
M
vnement, 32 Manette, 26, 67
clavier, 26, 82
Joystick, 67 N
souris, 30, 84 Niveau, 6
solide, 8
F
Facebook, 76 P
FixedUpdate, 26 Particules, 40
Pause, 27
G Plug-in
GetAxis, 67 crer, 15

customer 507877 at 2016-01-21


507877 23:38:34 +0100
Crez des jeux de A Z avecUnity-III. Concevoir un jeu 2D

installer, 55
Prefab, 12, 48, 84

R
Rigidbody, 13, 29

S
Serveur
stockage, 88
Sprite, 8
Steam, 73
Switch, 40
Symtrie, 26

T
Tag, 36, 44, 52, 85
tile, 4
Trail Renderer, 44
Transform, 26

U
Ulule, 78
Update, 26

W
WaitForSeconds, 27
WWW, classe, 88

page94

customer 507877 at 2016-01-21


507877 23:38:34 +0100