*Note: I created the most of the tutorials using the Roboblitz and Gears of War editors. Based on the engine, and the version, some properties specified may be in slightly different locations than what is displayed in the screenshots.

If you need to learn how to create a basic map I would reccomend:
For UT99, UT2K3 & UT2K4: the Unreal Wiki.
For UT3: Waylon's Tutorials.



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!