LHUMAIN AVANT TOUT !

Download Report

Transcript LHUMAIN AVANT TOUT !

D
Dr. Yamen EL TOUATI
TP3 – Développeement des jeu
ux 3d avec Unity3d
www.yaameneltouatii.com
G
Gestio
on des collisionss, Son
ns et Anima
A
ationss
O
Objectifs
1.
2.
3.
4.
5.
6.
7.
8.
Manipulation des sons audio
ders
Princiipe des collid
effet de l’option « is Trigger »
ollisions entrre les GameO
Object
Détecction et traiteement des co
Utilisaation des TAGs
Détecction et traiteement des co
ollisions avecc le fpc
Techn
nique de traccée de rayon (RayCastingg)
Jouerr des animations
N
Notions à rretenir
ressources audio
P
Pour jouer un
n clip audio, on doit tout d’abord ajou
uter le composant « Audiio Source » aau gameObjeect qui est
seensé produirre le son.
v
var sonLancement:A
AudioClip
p;
…
….
a
audio.PlayOneShot(
(sonLance
ement);
…
….
@
@script RequireCom
mponent(A
AudioSour
rce)
D
Dr. Yamen EL TO
OUATI – Unityy3d
Page 1
www.yam
meneltouati.co
om
D
Dans l’exemp
ple ci‐dessus,, la variable de type Aud
dioClip sera iinitialisée paar une ressou
urce audio (ffichier mp3 par
p
exemple). Cettte initialisattion peut êtree faite au nivveau de l’inspecteur (via un glisser/dééposer d’un fichier mp3 sur
niveau de l’inspecteur).
lee champ réseervé à cette vvariable au n
La méthode PlayOneShot du compo
osant Audio Source perm
met de joueer le son. Biien sûr, pou
ur utiliser ceette
m
méthode on d
doit préalabllement ajoutter le compo
osant Audio SSource au gameObject co
ontenant le sscript ci‐desssus.
P
Pour éviter lees erreurs, il eest recommaandé d’ajouteer la directivve @script RequireCo
omponent(A
AudioSourc
ce)
p
pour exiger la présence d
du composan
nt Audio Sou
urce dans le ggameObject contenant ce
c script. Ainsi, en associaant
u
un script conttenant cette directive à u
un gameObjeect, UNITY véérifie la présence du com
mposant Audio Source. Sii ce
utomatiquem
ment ajouté.
composant n’’est pas présent il sera au
R
Remarque : ne pas confondre le composantt « Audio Source
S
» aveec le comp
posant « Au
udio Listeneer »
(ggénéralemen
nt présent paar défaut dan
ns la caméra). Unity tolèrre un seul « A
Audio Listener » dans tou
ute la scène,, ce
q
qui explique le
l warning lo
orsqu’on ajou
ute un fpc (ccontenant un
ne caméra) ssans désactivver le « Audiio Listener » de
laa MainCamerra initiale.
Exemple de laancement d’u
un gameObjeet accompaggné d’un son :
v
var type_ob
bj_alancer: Transform
m;
v
var sonLanc
cement:Audi
ioClip;
f
function Up
pdate () {
if(In
nput.GetBut
ttonDown("Fire1")){
var anOb
bj=Instanti
iate(type_o
obj_alancer
r,transform
m.position,
,transform.rotation);
anObj.tr
ransform.Tr
ranslate(2,
,2,1,Space.
.Self);
anObj.ri
igidbody.Ad
ddForce(tra
ansform.for
rward * 100
00);
audio.Pl
layOneShot(
(sonLanceme
ent);
}
}
@
@script Req
quireCompon
nent(AudioS
Source)
LLes Colliders
D
Dans Unity3d
d, le traitemeent des collissions, le rend
du des objett, et l’applicaation des forces physiquees sur les corps
riigides sont trois notions indépendaantes. Pour pouvoir gérrer les collissions, un gameObject doit contenirr le
composant co
ollider.
D
Détection dee collision en
ntre les gameObject parr Collider.On
nCollisionXxxxx
•
Collid
der.OnCollisio
onEnter ou
u Rigidbody..OnCollisionEEnter ou en
ncore MonoBehaviour.O
OnCollisionEn
nter
est ap
ppelé quand le collider/riigidbody com
mmence à faiire une collision avec un autre
a
collider/rigidbody
D
Dr. Yamen EL TO
OUATI – Unityy3d
Page 2
www.yam
meneltouati.co
om
unction OnC
CollisionEnterr (collisionIn
nfo : Collision
n) : void
fu
•
Collid
der.OnCollisio
onExit ou Rigidbody.O
OnCollisionExxit, ou en
ncore Mon
noBehaviour..OnCollisionEExit
est ap
ppelé quand le collider/riigidbody n’esst plus en collision avec l’’autre collideer/rigidbody
fu
unction OnC
CollisionExit(ccollisionInfo : Collision) : void
•
Collid
der.OnCollisio
onStay ou en
ncore Collider.OnCollision
nStay
est appelé une fois à ch
haque nouveeau frame o
où le collider/rigidbody est toujourss en collision
n avec l’au
utre
collider/rigidb
body
fu
unction OnC
CollisionStay (collisionInfo
o : Collision)) : void
D
Détection dee collision en
ntre les gameObject parr Collider.On
nTriggerXxxxx
C
Collider.isTriggger
peermet de vérrifier si l’optiion est activée. Lorsque cette option
n est activéee, les méthod
des
O
OnTriggerXxxx seront déclenchées saans faire le traitement de la collision par le m
moteur physique. Ainsi, les
gameObjects où cette o
option est acctivée seron
nt « traverséés » par les autres objeet tout en déclenchant
d
un
trraitement.
•
Collid
der.OnTriggerEnter
est ap
ppelé quand le collider co
ommence à ffaire une colllision avec un
n autre collid
der
fu
unction OnTriggerEnter (other:
(
Collid
der) : void
•
Collid
der.OnTriggerExit
est ap
ppelé quand le collider n’’est plus en ccollision avecc l’autre collider
fu
unction OnTriggerExit(otther: Collider) : void
•
Collid
der.OnTriggerStay
est appelé une fois à chaq
que nouveau frame où le collider est ttoujours en ccollision avec l’autre collider
fu
unction OnTriggerStay (o
other: Collide
er) : void
D
Dr. Yamen EL TO
OUATI – Unityy3d
Page 3
www.yam
meneltouati.co
om
D
Détection dee collision avvec le fpc On
nControllerC
ColliderHit
function OnContrrollerColliderrHit (hit : ControllerCollid
derHit) : void
d
C
Cette fonction est appelée quand le fpc
f fait une collision
c
avecc un collider.. hit permet d’avoir des iinformation sur
laa collision et la source dee la collision.
D
Détection dee collision avvec la technique du Rayccast (tracée de rayon) P
Physics.Rayccast
staticc function Raaycast(origin: Vector3, diirection: Vecctor3, distancce: float = M
Mathf.Infinityy,
layerMassk: int = DefaaultRaycastLLayers): bool;
o: RaycastHitt, distance: flloat =
staticc function Raaycast(origin: Vector3, diirection: Vecctor3, hitInfo
Mathf.Inffinity, layerM
Mask: int = D
DefaultRaycastLayers): bo
ool;
RaycastHit, distance:
d
floaat = Mathf.In
nfinity, layerrMask: int =
staticc function Raaycast(ray: Ray, hitInfo: R
DefaultRaaycastLayerss): bool;
•
•
•
•
•
•
origin
n : coordonnéés de la source du rayon
directtion: directio
on du rayon
hitInffo : contient le informatio
ons sur le gam
meObjet touché par le raayon
distan
nce : distancee du rayon
layerM
Mask : utiliséé pour ne pass considérer certaine colllisions selon le masque.
Retou
urne vrai si lee rayon (fictiff) touche un gameObjectt
LLes animations
D
Dr. Yamen EL TO
OUATI – Unityy3d
Page 4
www.yam
meneltouati.co
om
ns peuvent êêtre réalisées avec un au
utre outil (3d
dsMax, Maya, Cinema4d
d,Zbrush, …) puis importéées
Les animation
dans unity. U
Unity est com
mpatible avecc la plupart des
d formats connus. En outre, Unity offre la posssibilité de faaire
d
des animation
ns directemeent avec le paanneau « aniimation » qu’on peut ajouter à partir du menu window.
d
n peuvent être manipulé dans un scriipt via le com
mposant Anim
mation. Pourr jouer une aanimation, il est
Les animation
p
possible d’utiliser Animatiion.Play :
Play(aanimation: string,
s
mode: PlayMode = PlayMode..StopSameLaayer): bool;
D
Dr. Yamen EL TO
OUATI – Unityy3d
Page 5
www.yam
meneltouati.co
om
Travail à faire :
Exercice 1 :
Reprendre le projet correspondant à TP2‐exercice1, ajouter un son correspondant au tir. Ajouter également un
bruit de fond (son des vagues par exemple) au terrain.
Exercice 2 :
Reprendre le projet correspondant à TP2‐exercice2, Ajouter un son correspondant à l’explosion qui accompagne
la disparition du gameObject.
Remarque : faites attention lorsque vous associez le composant Audio source à l’objet qui sera détruit !
Exercice 3 :
Reprendre le projet de l’exercice 1, ajouter 3 copies du préfab obj1 (réalisé dans TP1‐exercice2) et 3 copies du
prefab obj3 (TP1‐exercice2). Modifier le prefab obj1 en activant l’option « is trigger ». Faites les scriptes
nécessaires pour que le comportement du jeu soit le suivant :


Il faut détruire tous les gameobjects « obj1 » par le tir de missiles. La destruction d’un objet de type
« obj1 » est accompagné d’une explosion (un système de particule au choix).
le tir sur les objets de type « obj 3 » est sans effet initialement. Une fois tous les gameobjects de type
« obj1 » sont detruits, le tir sur un objet de type « obj3 » provoque sa disparition. Une fois tous les
gameobjects « obj3 » disparaissent, un son se joue automatiquement pour signaler la fin du jeu.
Exercice 4 :
Reprendre le projet de l’exercice 3, en appliquant les modifications suivantes :


Pour détruire un objet de type « obj1 », il faut lui tirer dessus avec 3 balles dans un intervalle de 2
secondes.
La durée entre la destruction du premier objet « obj3 » et le dernier ne doit pas dépasser 3 secondes. au
cas contraire, tous les objets « obj3 » détruits, réapparaissent à leurs anciennes positions.
Exercice 5 :
Réaliser une animation d’ouverture de porte (verticale) et un script permettant d’ouvrir la porte par le fpc
lorsqu’il se rapproche. La fermeture se fait automatiquement après n secondes de l’ouverture (n définie depuis
l’inspecteur et initialisée à 3). L’ouverture et la fermeture sont accompagnées de sons. Utiliser la méthode
OnControllerColliderHit .
Exercice 6 :
Reprendre l’exercice 5 avec la technique du RayCast.
Dr. Yamen EL TOUATI – Unity3d
Page 6
www.yameneltouati.com