Collisions physiques en jeux vidéo : détection et traitement des impacts

Page 1 sur 40Lecteur de document UniversityLib

Collisions physiques en jeux vidéo : détection et traitement des impacts

Programming, Math, etc. · textbook

Browse all physique documents

Mohamed Amine MEZGHICH

Ing nieur ENSI

Doctorant en traitement dimage, Lab. CRISTAL,ENSI

E-mail:[email protected]

Cycle Ing nieur

Ann e universitaire 2012-2013

1

(cid:1) Pour d tecter les interactions physiques entre les objets de

jeu, la m thode la plus courante consiste utiliser un

collider un filet invisible tout autour dun objet charg de

d tecter les collisions avec dautres objets.

d tecter les collisions avec dautres objets.

(cid:1) La d tection de collision regroupe la fois la d tection

et la r cup ration des informations provenant de ces

collisions.

Ann e universitaire 2012-2013

2

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Il est non seulement possible de d tecter que deux colliders

(composants de collision) interagissent, mais galement

danticiper une collision et deffectuer de nombreuses

autres t ches laide dune technique appel e raycasting.

(cid:1) Nous allons voir en d tail, deux l ments essentiels au

d veloppement dun jeu : la d tection de collision et le

raycasting(trac de rayon).

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

3

(cid:1) Lorsque des objets entrent en collision dans nimporte quel

moteur de jeu, des informations sur cet v nement

deviennent alors disponibles. En enregistrant diff rentes

informations au moment de limpact, le moteur de jeu peut

ensuite r agir de mani re r aliste.

(cid:1) Dans un jeu tenant compte des lois physiques par exemple,

si un objet tombe au sol dune certaine hauteur, le moteur a

besoin de savoir quelle partie de cet objet touche le sol en

premier pour contr ler de fa on correcte et r aliste la

r action de lobjet cet impact.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

4

(cid:1) Dans le cas de louverture dune porte, vous avez besoin de

d tecter les collisions entre le collider du personnage du

joueur et celui situ sur ou pr s de la porte.

(cid:1) Cela naurait gu re de sens de d tecter les collisions

ailleurs, puisque lanimation de la porte doit se d clencher

ailleurs, puisque lanimation de la porte doit se d clencher

lorsque le joueur est assez proche pour esp rer quelle

souvre ou pour franchir le seuil.

(cid:1) Par cons quent, vous allez v rifier les collisions entre le

collider du personnage et celui de la porte. Vous devez

toutefois tendre la profondeur du collider de la porte

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

5

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

6

(cid:1) Si le collider de la porte d passait de la surface visuelle de la

porte, le personnage entrerait en collision avec une surface

invisible qui

larr terait net. En outre, bien que vous

puissiez utiliser cette collision pour d clencher lanimation

douverture de la porte, limpact initial dans le collider

semblerait peu naturel pour le joueur, ce qui nuirait on

immersion dans le jeu.

immersion dans le jeu.

(cid:1) Si la d tection de collision fonctionne tr s bien entre le

collider du personnage et celui de la porte dun point de vue

trop

technique,

dinconv nients pour quun d veloppeur de jeux cr atif ne

l

recherche pas une approche plus intuitive. Cest

quintervient le raycasting.

approche

pr sente

donc

cette

Ann e universitaire 2012-2013

7

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Bien quil soit possible de d tecter les collisions entre le

collider du personnage et un collider qui sadapte lobjet

porte, il semble plus judicieux que la porte souvre lorsque

le joueur lui fait face et une certaine distance, ce qui peut

tre r alis en projetant un rayon dune longueur limit e

depuis lavant du personnage.

depuis lavant du personnage.

(cid:1) Cette m thode garantit galement que le joueur ne peut

pas ouvrir la porte sil lui tourne le dos ; avec le raycasting,

il doit faire face lobjet pour lutiliser, ce qui est plus

logique.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

8

(cid:1) Dans le raycasting, un rayon est trac dans la direction

vis e. Il est alors possible de r cup rer de informations sur

le collider que ce rayon touche. Une fois le collider

identifi , un script peut alors d signer lobjet de jeu lui-

m me et sc nariser son comportement en cons quence.

(cid:1) Vous pouvez obtenir des informations tr s d taill es,

comme le point dimpact, et les utiliser pour d finir la

r action de la cible (faire reculer lennemi dans une

direction particuli re par exemple).

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

Advertisement

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

9

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

10

(cid:1) Dans ce qui reste, nous allons illustrer les deux m canismes

de d tection de collisions sur un exemple.

(cid:1) Il sagit de d clencher louverture et la fermeture de la porte

dune cabane(outpost), cr e avec le logiciel Maya.

dune cabane(outpost), cr e avec le logiciel Maya.

(cid:1) Trois animations(Idle, ouverture, fermeture) sont attach es

la porte.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Les m canismes de d tection de collisions vont nous

permettre de d clencher ces animations.

Ann e universitaire 2012-2013

11

(cid:1) Avant de commencer utiliser la fois la d tection de

la porte, vous

collision et le raycasting pour ouvrir

devez int grer la sc ne lavant-poste(Cabane).

(cid:1) Plus loin, vous crirez le script qui contr le les tats

(cid:1) Plus loin, vous crirez le script qui contr le les tats

danimation de ce mod le.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Une fois lavant-poste dans le panneau Scene, son nom

il est

le panneau Hierarchy et

appara t dans

automatiquement s lectionn .

Ann e universitaire 2012-2013

12

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

13

(cid:1) Modifiez la valeur Scale Factor de 1 2, puis cliquez

sur le bouton Apply. Ainsi, la taille de lavant-poste est

suffisante pour que lobjet Character Controller passe

par la porte et la taille de la pi ce sera r aliste lorsque le

personnage se trouvera lint rieur.

personnage se trouvera lint rieur.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

14

(cid:1) La porte doit tre identifi e comme un objet

particulier pour pouvoir souvrir lorsquelle entre en

collision avec le joueur.

(cid:1) Pour cela, lobjet doit poss der un composant Collider

(cid:1) Pour cela, lobjet doit poss der un composant Collider

et un tag sp cifique qui d signera lobjet dans le script.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Le Collider Mesh Collider est assign tous les

maillages des objets enfants dun mod le lorsque

loption Generate Colliders est activ e.

Ann e universitaire 2012-2013

15

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

16

(cid:1) Vous devez le remplacer par un collider plus simple et

plus efficace en forme de bo te.

(cid:1) Cliquez sur Component > Physics > Box Collider dans

le menu principal.

le menu principal.

(cid:1) Une premi re bo te de dialogue, Losing Prefab, signale

que lajout dun nouveau composant entra nera la fin

de la connexion entre cet objet et lobjet parent dans le

panneau Project.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

17

(cid:1) Autrement dit, la copie plac e dans le panneau Scene ne sera

Advertisement

plus identique la ressource dorigine et toute modification

apport e la ressource dans le panneau Project ne sera pas

r percut e sur cette copie. Cliquez simplement sur le bouton

Add pour confirmer.

(cid:1) Une seconde bo te de dialogue appara t dans laquelle vous

indiquez si vous voulez ajouter ce collider votre objet (Add), le

remplacer (Replace) ou annuler lop ration (Cancel).

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) le programme vous demande si vous souhaitez remplacer celui

qui existe plut t que den ajouter un nouveau.Comme nous

navons plus besoin du Mesh Collider, cliquez sur Replace.

Ann e universitaire 2012-2013

18

(cid:1) Le composant Box Collider que vous venez dajouter

appara t alors autour de la porte, figur par un contour

vert.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

19

(cid:1) Lobjet enfant door tant toujours s lectionn , cliquez

sur le menu d roulant Tag situ en haut du panneau

Inspector, puis choisissez Add Tag. Ajoutez le tag

outpostDoor dans le Tag Manager qui saffiche dans

le panneau Inspector.

le panneau Inspector.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

20

(cid:1) Par d faut, Unity suppose que toutes les animations

des objets plac s sur la sc ne doivent tre lues

automatiquement. Cest pourquoi vous avez d sactiv

(idle) lanimation de cette ressource.

(cid:1) Si vous laissez Unity lancer automatiquement les

Si vous laissez Unity lancer automatiquement les

animations des objets, ceux-ci risquent de safficher

animations des objets, ceux-ci risquent de safficher

dans un des tats danimation plut t quavec leur

apparence par d faut.

(cid:1) Pour corriger ce probl me, il suffit de d cocher la case

Play automatically dans le panneau Inspector pour

lobjet parent du mod le.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

21

(cid:1) Lobjet outpost est maintenant pr t interagir avec le

personnage du joueur. Vous allez donc commencer

crire les scripts pour g rer les collisions avec la porte,

en utilisant soit la d tection de collision soit le

raycasting.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

22

(cid:1) Nous allons tudier les deux m thodes permettant de

d clencher lanimation afin que vous puissiez ensuite

utiliser lune ou lautre lors du d veloppement de vos jeux

en fonction de la situation.

(cid:1) Dans un premier temps, vous utiliserez la d tection de

(cid:1) Dans un premier temps, vous utiliserez la d tection de

collision une notion essentielle conna tre lorsque vous

commencez travailler sur des jeux dans Unity.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Puis dans un second temps,

impl menterez

simplement une projection de rayon depuis le personnage

du joueur.

vous

Ann e universitaire 2012-2013

23

(cid:1) Lors du d veloppement de jeux, il est souvent plus

efficace d crire un seul script pour un objet qui

interagira avec plusieurs autres objets, plut t que

d crire de nombreux scripts pour chacun des objets

afin de v rifier que ceux-ci entrent en collision avec un

objet en particulier.

objet en particulier.

(cid:1) Pour un jeu comme celui-ci, vous allez donc crire un

script appliquer au personnage du joueur et non un

script pour chaque objet avec lequel le joueur peut

interagir.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

24

(cid:1) Cr er un nouveau r pertoire dans le projet, nommer ce

r pertoire (Folder)Scripts

(cid:1) S lectionner ce r pertoire et cr er un nouveau fichier

javascript

(cid:1) Nommer ce fichier(F2)en PlayerCollisions

(cid:1) Nommer ce fichier(F2)en PlayerCollisions

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Advertisement

Ann e universitaire 2012-2013

25

(cid:1) Utiliser OnControllerColliderHit

Par d faut,

tous

les nouveaux scripts

JavaScript

contiennent la fonction Update(), qui saffiche lorsque

fois. Pour

vous

commencer, vous allez d clarer les variables que vous

commencer, vous allez d clarer les variables que vous

utiliserez.

les ouvrez pour

la premi re

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Pour d finir ces variables, ajoutez les lignes suivantes au

tout d but du script PlayerCollisions que vous

modifiez

Ann e universitaire 2012-2013

26

(cid:1) Utiliser OnControllerColliderHit

private var doorIsOpen : boolean = false;

private var doorTimer : float = 0.0;

private var currentDoor : GameObject;

var doorOpenTime : float = 3.0;

var doorOpenSound : AudioClip;

var doorShutSound : AudioClip;

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

27

(cid:1) Utiliser OnControllerColliderHit

Et ajoutez la fonction suivante:

function OnControllerColliderHit(hit : ControllerColliderHit){

}

(cid:1) Cette

de

collision,

d tection

appel e

fonction

OnControllerColliderHit,

aux

personnages

composant

jouables

CharacterController, comme cest le cas ici. Son seul param tre,

hit, est une variable qui stocke des informations lorsquune

collision se produit, notamment lobjet de jeu avec lequel le

joueur est entr en collision.

de

sp cialement

utilisent

est

qui

destin e

le

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

28

La fonction de collision compl te doit maintenant tre semblable celle-ci :

function OnControllerColliderHit(hit: ControllerColliderHit){

if(hit.gameObject.tag == "outpostDoor" && doorIsOpen == false){

OpenDoor();

}

}

}

La fonction personnalis e OpenDoor() compl te doit tre analogue ceci:

function OpenDoor(){

audio.PlayOneShot(doorOpenSound);

doorIsOpen = true;

var myOutpost : GameObject = GameObject.Find("outpost");

myOutpost.animation.Play("dooropen");

}

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

29

(cid:1) function Update(){

if(doorIsOpen){

doorTimer += Time.deltaTime;

if(doorTimer > 3){

shutDoor();

doorTimer = 0.0;

}

}

}

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

30

(cid:1) function shutDoor(){

audio.PlayOneShot(doorShutSound);

doorIsOpen = false;

var myOutpost : GameObject =

GameObject.Find("outpost");

GameObject.Find("outpost");

myOutpost.animation.Play("doorshut");

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

}

Ann e universitaire 2012-2013

31

(cid:1) Pour

le moment, vous disposez de deux fonctions

personnalis es, OpenDoor()

shutDoor(), qui

effectuent les trois m mes t ches : elles lancent la

lecture dun son, d finissent une variable bool enne et

d clenchent une animation.

d clenchent une animation.

et

(cid:1) Pourquoi ne pas alors cr er une seule fonction qui soit

capable de jouer diff rents sons, de d finir si

la

variable bool enne est true ou false et de lire les

diff rentes animations ?

Ann e universitaire 2012-2013

32

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) function Door(aClip : AudioClip, openCheck : boolean,

animName : String,thisDoor : GameObject){

audio.PlayOneShot(aClip);

doorIsOpen = openCheck;

doorIsOpen = openCheck;

thisDoor.transform.parent.animation.Play(animName);

}

(cid:1) Pour ouvrir la porte, par exemple, vous pourriez appeler

cette fonction et d finir chaque param tre de la fa on

suivante :

Door(doorOpenSound, true, "dooropen", currentDoor);

Advertisement

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

33

(cid:1) Finaliser le script

Pour compl ter le script, vous allez vous assurer que

lobjet quil ajoute poss de un composant Audio

Source, ce qui est n cessaire pour lire les extraits

Source, ce qui est n cessaire pour lire les extraits

sonores puisque votre fonction Door d clenche du

son.

Ajoutez la ligne suivante tout en bas du script, en vous

assurant que la ligne NE se termine PAS par un point-

virgule.

@script RequireComponent(AudioSource)

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

34

(cid:1) Attacher le script lobjet:

Il existe deux m thodes pour attacher un script un objet dans

Unity :

1-faire glisser le script depuis le panneau Project sur lobjet dans

les panneaux Hierarchy ou Scene.

les panneaux Hierarchy ou Scene.

2-s lectionner lobjet puis cliquer sur Component > Scripts >

PlayerCollisions dans le menu principal de Unity.

Remarque: Le sous-menu Scripts du menu Component contient

la liste de tous les scripts disponibles dans le panneau Project : il

affichera le v tre d s que vous laurez cr et sauvegard .

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

35

Pour entrer en collision avec lobjet Door, nous devons

augmenter la valeur Z du Box Collider.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

36

(cid:1) Bien que lutilisation de la d tection de collision ou de

d clencheur soit une m thode tout fait valable, le

raycasting vous permet de vous assurer que le joueur

ouvre seulement la porte de lavant-poste sil lui fait

face.

face.

(cid:1) En effet, le rayon part toujours dans la direction vers

laquelle lobjet First Person Controller est tourn , si

bien quil ne coupera pas la porte si le joueur lui tourne

le dos, par exemple.

Ann e universitaire 2012-2013

37

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) R initialiser le collider de la porte

Comme vous voulez viter leffet de repoussement qui

survient lors du contact avec le collider invisible de la

porte, s lectionnez lobjet enfant door du composant

porte, s lectionnez lobjet enfant door du composant

Box Collider dans le panneau Inspector, puis donnez

au param tre Size une valeur de 0,1 sur laxe Z.

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

(cid:1) Cela correspond la profondeur visuelle de la porte.

Ann e universitaire 2012-2013

38

(cid:1) Ajouter le rayon

Le raycasting est plac dans la fonction Update() pour la simple

M

M

o

o

h

h

raison que le rayon doit tre projet vers lavant chaque

a

a

m

m

image.

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

var hit : RaycastHit;

var hit : RaycastHit;

if(Physics.Raycast (transform.position, transform.forward, hit, 5)) {

if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen ==

i

i

false){

currentDoor = hit.collider.gameObject;

Door(doorOpenSound, true, "dooropen", currentDoor);

}

}

Ann e universitaire 2012-2013

39

(cid:1) Ajouter le rayon

var hit : RaycastHit;

if(Physics.Raycast (transform.position, transform.forward,

hit, 5))

transform.position: Le point d mission du rayon

transform.forward: La direction du rayon

hit: La structure des donn es

5: La longueur du rayon

i

i

M

M

o

o

h

h

a

a

m

m

e

e

d

d

A

A

m

m

n

n

e

e

M

M

E

E

Z

Z

G

G

H

H

I

I

C

C

H

H

Ann e universitaire 2012-2013

40