*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.



Interactions Classiques - Ascenseur/Bouton



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 seulement utiliser des movers/Interpactors (cela revient au même) qui sont généralement animés avec Matinee. Si vous avez besoin d'apprendre à utiliser Matinee, je vous recommande le Tutorial de Hourences comme point de départ.

J'ai ajouté un static mesh cube dans la map et l'ai converti en Interpactor. Je l'ai ensuite modifié pour qu'il ressemble à une porte. Le pivot est au centre et je vais uniquement l'animer de haut en bas ou d'un côté et de l'autre. Une porte pivotante nécessitera un point de pivot situé sur sa charnière, et vous aurez à penser où le joueur se trouvera pour qu'il ne soit pas écrasé contre un mur lors de l'ouverture de la porte.

*Note: Les points de pivot (ou d'origine) des statics meshes servent de point charnière ou de centre de rotation pour les Interpactors. Si vous avez besoin de créer une porte, ou n'importe quel autre objet mobile qui tournera, pivotera ou se balancera, vous aurez besoin de connaître son point de pivot. Il est impossible de redéfinir un point de pivot de façon permanente avec ce moteur. Si vous trouvez un static de porte qui vous plait bien pour en faire une porte pivotante mais que son pivot est en son centre, et bien vous n'avez pas de chance ! Le point de pivot est déterminé lors de la création du static dans un logiciel de 3D mais pas dans UnrealEd.

Ascenseur activé par un Bouton : ce type d'ascenseur s'active lorsque qu'un joueur interagit avec un bouton. j'ai créé un système simple.

Utilisons notre "recette de cuisine" que j'ai présenté dans l'Introduction de cette série de tutoriaux:

1) Que souhaitons nous faire ?
Un ascenseur qui s'active par un bouton.

2) Ingrédients:
1 Interpactor (l'ascenseur)
1 Interpactor (bouton)
1 trigger (bouton)
1 event Trigger Used
1 Matinee


3) Mélangeons le tout :
Dans le niveau, j'ai créé un mur avec un renfoncement et j'ai placé l'interpactor au fond du renfoncement. J'ai aussi ajouté un petit interpactor pour le bouton juste sur la droite accompagné d'un trigger avec un petit rayon de collision. J'ai changé le Material du bouton avec un material plus brillant.




Du côté de Kismet, je crée d'abord la Matinee qui contrôle l'ascenseur. Je vais également créer un event Trigger Used pour activer ma Matinee. Je désactive le 'AimToInteract' et le 'bPlayerOnly', et je règle le 'MaxTriggerCount' à 0 pour pouvoir utiliser l'ascenseur indéfiniment. Maintenant que se passe t-il si un joueur continue sans cesse d'appuyer sur le bouton ? Pour éviter de planter la Matinee, j'ajoute une 'Gate' pour désactiver le signal allant à la Matinee et un Delay pour la réactiver en lui donnant la longueur de deux fois la durée de la Matinee (pour l'aller et le retour). J'ajoute également un Delay après ma Matinee que je reconnecte au Reverse pour faire revenir l'ascenseur après la durée de ce Delay. Enfin, puisque le bouton est en dehors de l'ascenseur, j'ajoute un Delay juste après l'event Used pour permettre au joueur de monter sur l'ascenseur. A la place d'une 'Gate', j'aurais pu mettre deux Toggles, un pour désactiver le Used une fois déclenché et un second pour le réactiver. Mêmes fonctionnalités, script différent.




4) Testons le. Lancer le jeu et testez le, cela marche bien pour moi.

5) Ajustons le. D'abord, pensez aux collisions et à l'éclairage et corrigez ces problèmes. Ensuite, envisager tous les problèmes possibles. Que se passe t-il si l'ascenseur se ferme alors qu'un joueur est en dessous ? Cela écrase t-il le joueur ou est-ce que l'ascenseur change de direction ? Utilisons une propriété de l'event Mover pour nous aider.

Sélectionner l'interpactor ascenseur et ajouter un event Mover dans Kismet. Supprimer la nouvelle Matinee que ça a créé, et sur votre première Matinee, faites apparaître tous les connecteurs. Maintenant, connecté le 'HitActor' de l'event Mover au 'ChangeDir' de la Martinee. De ce fait, à chaque fois que l'ascenseur heurtera un joueur, il changera de direction. Vous pourriez également connecter le HitActor à un Cause Damage en plus du changement de direction, ou uniquement à un Cause Damage.




Mais que va t-il se passer si un joueur se tient en dessous de l'ascenseur, le faisant donc repartir et commence ensuite à appuyer sur le bouton ? Le Delay de 6 secondes sera fini et le joueur va pouvoir remettre l'ascenseur à son origine avant qu'il n'ait fini de redescendre. Pour palier à ce problème, je vais ajouter des booléens pour dire au système si l'ascenseur est en action ou pas et donc contrôler quand le bouton peut être utilisé à nouveau. Je vais également supprimer le Delay de 6 secondes. Maintenant, quand le trigger est utilisé, le système va analyser l'état du Booléen avec le Compare Bool. Si la réponse est 'False', cela signifie que l'ascenseur est en action et donc ne fait rien. Si l'ascenseur est au sol, ce qu'il est par défaut, cela permet au signal de passer par le Delay de 2 secondes et va basculer le booléen à 'False' (ascenseur en action). Le reste est quasiment identique, sauf que le booléen sera rebasculé sur 'True' (ascenseur au sol). De ce fait, même si un joueur fait changer l'ascenseur de direction, le booléen ne rebasculera à 'True' que lorsque l'ascenseur sera revenu en bas. Le joueur peut également appuyer autant qu'il veut sur le bouton, celui-ci ne sera actif que lorsque l'ascenseur sera au sol.




Normalement, si nous voulions ajouter des sons, nous pourrions le faire par le biais de l'interpactor lui-même. Cependant, puisque nous avons une matinee qui peut être interrompue par le changement de direction, cela peut ne pas fonctionner correctement. Donc je vais ajouter un event track dans la Matinee, et déclencher les sons manuellement avec des PlaySounds. Un va servir pour la montée, un second pour le retour et un dernier pour le changement de direction. Je vais cibler l'ascenseur pour les sons aient l'air d'en venir. Si le joueur heurte l'ascenseur, je vais également désactivé le son de la descente et activer le son de la montée. Je vais également cacher tous les connecteurs inutilisés pour rendre le tout plus lisible.




Le système semble fonctionner correctement, mais je voudrais ajouter un indice visuel pour savoir si le bouton est actif ou désactivé. C'est pourquoi je les avais préalablement convertis en Interpactors. Si nous voulions faire cela en détail, nous pourrions animer les boutons avec des matinees et les faire s'enfoncer dans le mur. Mais je vais simplement changer leur material (avec des SetMaterial) en passant d'un material brillant (boutons actifs) à un material sombre (boutons désactivés). Donc quand je vais déclencher le 'Used', cela va changer le material en quelque chose de sombre. Quand le système est réouvert et peut être à nouveau utilisé, je veux que le material redevienne brillant. Nous allons cibler les SetMaterial sur les interpactors boutons. Je vais en plus ajouter une light Toggeable et la placer devant les boutons pour correspondre à l'état activé/désactivé de mes boutons.




Le système correspond maintenant à peu près à ce que je voulais qu'il soit. Nous avons un ascenseur activé par un bouton, qui se rouvrira si un joueur le heurte, a des sons corrects et a des boutons qui indiquent s'ils sont utilisables ou non.

6) Ajustements pour les modes solo/multi-joueur. Comme vous l'avez peut-être lu dans la section Mode Solo/Co-op/Multi-joueur, il y a beaucoup de considérations à prendre en compte quelque soit le mode choisit. Ce système tel qu'il est là devrait être OK, et pour le mode solo, et pour le mode multi-joueur. Mais vous aurez quand même à vous poser quelques questions. Que se passe t-il si deux joueurs se battent sur l'ascenseur en mouvement ? En fait, il semble que cela devrait fonctionner. Et s'il y a aussi un bouton en haut et que les deux joueurs appuient en même temps ? Bien, si le deuxième bouton est correctement associé au booléen, cela devrait envoyer un seul signal, donc ça semble OK. Si vous voulez que des PNJs puissent se servir de l'ascenseur, alors vous aurez à ajouter quelque chose pour indiquer à l'intelligence artificielle d'interagir avec. Sinon, le système semble bien complet comme il est, à moins que vous ne souhaitiez attacher des emitters ou d'autres objets au système...