|
Prologue - Un Mover Simple
|
J'ai créé une simple map de test consistant en
un peu de BSP, une skylight, un playerstart, un skydome et une
DirectionalLight.
Je vais seulement utiliser des éléments de base
de l'éditeur qui se trouvent dans les packages officiels.
Je vais utiliser des Movers/Interpactors (les termes sont interchangeables)
qui sont souvent animés avec Matinee. Si vous avez besoin
d'apprendre à utiliser Matinee, je vous conseille le
Tutorial
de Hourences comme point de départ.
*Note: Je vais commencer par un système simple et le
compliquer par la suite.
Reprenons les étapes de notre "recette de cuisine"
une par une:
1) Qu'est-ce que je veux faire ?
Je vais faire un event Trigger Touch pour un mover.
2) Quels sont mes ingrédients ?
J'ai besoin d'un trigger et d'un static mesh en forme de cube.
Donc je les ajoute dans ma map.
|
|
Maintenant j'ai besoin des mes ingrédients Kismet :
Je sélectionne le trigger, passe dans Kismet et crée
un event Trigger Touch.
|
|
Je sélectionne le static mesh cube, clique droit dessus
et choisit Convert / to mover/interpactor. Puis je sélectionne
mon mover cube, passe dans Kismet et crée un Object variable
qui fait référence à mon cube.
|
|
Enfin, je crée une Matinee.
|
|
3) Assemblez le tout :
D'abord, je règle la Matinee du Cube : dans Matinee,
je crée un nouveau Empty Group que j'appelle 'Cube' pour
représenter notre objet. Je connecte la référence
Object du cube à la sortie 'Cube' dans Kismet. Ensuite
dans Matinee, je crée un Movement Track dans le group
Cube . Je crée mes keys pour que le cube s'élève
dans les airs : une au début pour l'état au repos
et une autre à 5 secondes qui représente son état
ouvert (dans les airs).
Puis dans Kismet, je connecte le Touched de mon trigger à
l'entrée Play de ma Matinee.
|
|
4) Testez le:
Que se passe t-il lorsque nous le testons ? Si vous appuyez
sur le bouton Jouer depuis l'éditeur
alors la map devrait démarrer, vous apparaissez et vous
verrez le cube resté au sol. Marchez vers le trigger
et le cube devrait s'élever dans les airs et s'arrêter.
*note : Si le mover/interpactor ne bouge pas, vérifiez
qu'il est bien réglé sur interpolating. Ouvrez
les propriétés du mover et dans Movement/Physics,
sélectionné 'PHYS_Interpolating' dans le menu
déroulant.
5) Ajustez le:
Bien, maintenant que nous savons qu'il fonctionne, que souhaitons
nous faire d'autre ? Je vais vous présenter quelques
propriétés disponibles, et ensuite en choisir
une.
a) Collision et éclairage.
Par défaut, la collision d'un mover n'est pas activée.
Suivant vos attentes, vous aurez à changer les propriétés
de collision suivant ce que vous souhaitez faire. Vous aurez
également à régler les propriétés
d'éclairage ou les lights qui sont autours de votre mover.
Comme un interpactor est un objet dynamique, vous devrez l'éclairer
de façon dynamique. Collision et éclairage sont
au delà du sujet de ces tutoriaux donc ils ne sont expliqués
plus en profondeur.
b) Après un certain temps, faire redescendre notre cube.
Nous allons simplement ajouter un Delay (retard) auquel nous
lierons une valeur Random Float (valeur décimale aléatoire),
le tout connecté au ‘Completed’ de la Matinee.
Et ensuite connecter la sortie ‘Finished’ du Delay
à l'entrée ‘Reverse’ de la Matinee.
|
|
c) Quand le joueur sort du trigger, faire redescendre le cube.
Pour l'instant, le trigger ne peut être activé
qu'une fois, son rayon de collision est tout petit et la Matinee
peut seulement bouger le cube vers le haut. Changez le 'MaxTriggerCount'
du trigger à 2 : 1 pour quand le joueur va toucher le
trigger (Touched) et un deuxième pour quand il va le
quitter (Untouched). Connecter le Untouched du trigger au Reverse
de la Matinee. Maintenant, le rayon de collision du trigger
est très petit, appuyez sur C pour faire apparaître/disparaître
la vue des collisions dans toutes vos fenêtres. Ouvrez
les propriétés du trigger, allez dans Trigger/CylinderComponent,
vous trouverez Collision Radius (rayon de la collision) et Collision
Height (hauteur de la collision). Augmentez ces valeurs de manière
à permettre au joueur de pouvoir se mettre facilement
à l'intérieur de la zone de collision.
Maintenant testez. Déplacez votre joueur à l'intérieur
du trigger et arrêtez vous. Quand le cube est bien arrivé
en haut, quittez la zone du trigger et le cube devrait redescendre.
|
|
d) déclencher le système tout le temps
Si vous déconnecté la sortie Untouched, lorsque
le cube sera en arrivé en haut, vous aurez beau redéclencher
le trigger, le cube restera en haut. C’est du au fait,
qu’a chaque que vous toucher le trigger, la Matinee recoit
l’ordre d’utiliser la commande Lecture, et essaie
donc de lire depuis la position actuelle de la Matinee. Si vous
êtes à la fin de la Matinee (donc tout en haut),
il n’y a plus rien à lire. Pour résoudre
ce problème, sélectionnez la Matinee dans Kismet,
et dans ses propriétés cochez ‘Rewind on
Play’. Maintenant, une fois que la Matinee est finie,
si vous re-déclenchez le trigger, cela va se remettre
au début et le rejoué un fois de plus.
e) déclencher le système tout le temps avec le
Untouched
En utilisant le même système que dans c), réglez
simplement le MaxTriggerCount du trigger event à 0. Lorsque
vous le testez, vous noterez que si vous sortez du trigger pendant
que le cube s’élève, celui-ci va se mettre
à redescendre.
f) f) Bouger plus d'un objet.
Imaginons que ce mover soit un asenseur, et qu'il y ait un carton
posé sur cet ascenseur. Devons nous faire également
une Matinee pour le carton ? Vous pourriez, et plusieurs objets
avec leur propre Matinee pourraient être intéressant,
mais si c'est un objet qui va se déplacer exactement
de la même manière que le mover, il n'est pas utile
de compliquer la Matinee avec plus d'informations. Il y a deux
méthodes, aussi correcte l'une que l'autre, pour attacher
un autre élément à un mover. La seule restriction
est que cela doit être un autre mover.
Je vais donc dupliquer et réduire la taille de mon cube
et placer la copie juste au dessus du premier. Maintenant, vous
pourriez le faire dans Kismet, mais ce ne serait pas très
productif pour ce système donc je ne vais pas le faire.
Pour plus d'infos sur comment le faire dans Kismet, voyez la
page 'Attach
to Actor'.
Pour la méthode hors Kismet, sélectionnez le petit
cube, ouvrez ses propriétés et allez dans la section
'attachment'. Cliquez sur l'icône Verrou dans le coin
gauche en haut de la fenêtre pour laisser la fenêtre
ouverte. Maintenant, dans la vue 3D, sélectionnez le
gros cube. La fenêtre de propriétés sera
toujours sur le petit cube puisque vous l'avez vérouillée.
Maintenant, sélectionnez la ligne 'base', et cliquez
sur la flèche verte pour rentrer le gros cube dans ce
champ. Le gros cube est maintenant dans 'base'. Enfin, cochez
'bHardAttach' et fermer la fenêtre.
Maintenant, quand vous déclenchez le cube, le petit cube
devrait le suivre.
Si le petit cube devait se déplacer différemment
au dessus du gros cube lorsque celui ci est en mouvement, vous
auriez à ajouter un nouveau Group et un nouveau Movement
Track à la Matinee et à animer le petit cube séparément.
|
|
g) Deux triggers pour lancer la même séquence.
Si vous voulez avoir deux triggers différents pour déclencher
une même séquence, ils peuvent facilement être
réglés pour accomplir la même chose, mais
vous aurez à vous demander ce qui se passera lorsque
les deux sont déclenchés soit au même moment,
soit séparément.
Dans ma map, j'ai bougé le cube, ajouté un mur
en BSP, déplacé le trigger d'un côté
du mur et ajouter un TriggerVolume de l'autre côté.
Les triggers et triggerVolumes sont interchangeables, vous avez
simplement à choisir l'un ou l'autre en fonction de la
forme du volume de collision que vous désirez. Ensuite,
je vais dupliquer le Trigger Event que j'ai dans Kismet, cliquer
droit dessus et lui assigner le trigger volume (n'oubliez pas
d'avoir votre triggerVolume sélectionné).
|
|
Ensuite, j'ai juste à connecter les deux Touched à
l'entrée Play de la Matinee. Maintenant, si le joueur
touche soit le trigger, soit le triggervolume, le cube va s'élever.
Le problème de ce système, c'est que si je déclenche
le trigger, la séquence va se mettre en route, et que
si je vais ensuite toucher le triggervolume, ce va la rejouer.
Et ce n'est pas ce que je veux.
|
|
h) deux triggers pour déclencher la même séquence,
mais avec un qui désactive l'autre.
Il y a plusieurs façons de faire ceci. Vous pourriez
faire un système avec une Gate, ou des Booleans, ou des
Counters mais ce ne ferait que compliquer les choses vu ce que
l'on souhaite faire. Donc je vais choisir un Toggle pour ce
système simple. La chose à savoir à propos
des Toggles et des Events est qu'utiliser un Toggle pour éteindre
un Trigger Event ne désactive que l'Event mais pas le
trigger. Donc vous pourriez avoir d'autres Events basés
sur le même trigger qui pourront toujours fonctionner
même avec cet Event fermé.
Après avoir ajouté le Toggle, je connecte mes
Touched de mes deux Trigger Event à l'entrée Turn
Off de mon Toggle, et ensuite, j’indique ce que le Toggle
doit fermer en connectant la sortie rouge aux deux Trigger Events.
Maintenant, lorsque l'un des deux trigger est activé,
ca fermera les deux triggers. Par contre, je ne pourrais pas
réactiver les triggers en utilisant leur sortie Untouched,
puisque les events sont désactivés. J’aurais
à utiliser une autre méthode avec des Gates, des
Delays ou des Booleans pour contrôler leur état
on/off.
|
|
6) 6) Ajustez le système pour le mode solo / mode multi-joueur.
Je décris ceci plus en profondeur autre
part, mais vous devez toujours prendre ce facteur en compte
lorsque vous travaillez avec des triggers et des Events. Donc,
voila quelques questions à vous poser :
Mode Solo : Est-ce que le joueur à une classe particulière,
est-ce que les ennemis contrôlés par l'ordinateur
sont considérés comme des joueurs ? Ces questions
vous aideront à savoir si vous devez cochez ou décochez
le PlayerOnly dans les propriétés du trigger.
Parfois, vous voudrez que seul le joueur et non les bots puisse
déclencher un trigger, et parfois vous voudrez avoir
besoin des deux. Vous pourriez aussi avoir à préciser
dans les propriétés du trigger quelles classes
il doit détecter.
Mode Multi-joueur : Que ce passe t-il quand un joueur rentre
dans un trigger ? et avec deux joueurs ? Que se passe t-il quand
deux entrent, mais qu’un sort et que l'autre reste ? Ou
s'ils sortent tous les deux ? Vous aurez à pensez à
toutes ces possibilités lorsque vous créerez sous
Kismet pour des maps multi-joueur.
Je pourrais énumérer encore beaucoup d'autres
possibilités de systèmes, mais je pense que cela
vous donnera des bases intéressantes avec lesquelles
vous pouvez créer les vôtres. Bonnes créations!
|
|
|
|
|
|