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

Portes activées par Bouton: Ce type de porte est utilisé lorsque le joueur doit interagir avec un bouton pour ouvrir et fermer cette porte. J'ai créé un système très 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 ?
Une porte avec ouverture par bouton.

2) Ingrédients:
Trigger
Event Trigger Used
Mover (Door)
2 Movers (Buttons)
Matinee

3) Mélangeons le tout :
Dans le niveau, j'ai créé deux murs et placé mon mover "porte" entre les deux. J'ai aussi ajouté des interpactors plus petits de chaque côté de la porte pour représenter les boutons et des triggers aux mêmes endroits avec des rayons assez courts. J'ai également changé le material de mes boutons pour qu'ils soient plus brillants.




Du côté de Kismet, j'ai utilisé les triggers pour créer 2 events Trigger Used et j'ai ajouté une Matinee. J'ai connecté les sorties Out à l'entrée Play de ma Matinee et ajouter un Delay pour que 3 secondes après que la porte soit complètement ouverte, cela déclenche l'entrée Reverse de la Matinee et fasse refermer la porte. J'ai ensuite animé la Matinee de manière à déplacer la porte sur le côté. A chaque fois que le trigger se déclenchera, la porte s'ouvrira, permettant au joueur de passer. Sur les triggers, j'ai réglé le MaxTriggerCount à 0 pour pouvoir utiliser la porte indéfiniment et j'ai décoché le AimToInteract pour pouvoir activer le trigger plus facilement. La touche pour utiliser ces boutons lors du jeu devrait généralement être la touche 'utiliser/use' de votre jeu. J'ai caché les connecteurs inutilisés.




4) Testez dans le jeu, cela fonctionne bien pour moi.

5) Ajustez votre système : D'abord, n'oubliez pas les problèmes de collision de vos movers et leur éclairage. Ensuite, pensez aux problèmes potentiels. Que se passe t-il si la porte se ferme lorsque le joueur est en train de la franchir ? Est-ce que cela écrase le joueur ou est-ce que la porte se rouvre ? Que se passe t-il si vous activer un trigger alors que la porte est encore en train de s'ouvrir ou de se fermer ? Utilisons une propriété des events Mover pour nous aider à régler ce problème.

Sélectionnez le mover porte et ajoutez un event Mover dans Kismet. Supprimez la Matinee qui vient d'être créée et sur votre première Matinee, faites apparaître tous les connecteurs cachés. Ensuite, connectez la sortie Hit Actor de l'event Mover à l'entrée 'Change Direction' de la Matinee. Maintenant, à chaque fois qu'un joueur heurtera la porte, elle changera de direction. Vous pourriez facilement connecter le Hit Actor à un Cause Damage en plus du changement de direction, ou juste causer des dégâts.




Mais que se passe t-il lorsque le joueur appuie sur les boutons encore et encore ? Après test, la porte va rester ouverte aussi longtemps que le joueur continue à appuyer sur les boutons. Supposons que ce ne soit pas ce que je veux. Je veux que les boutons soient "désactivés" jusqu'à ce que le système soit terminé. Une manière simple de faire cela serait de régler le 'ReTriggerDelay des triggers sur le temps que le cycle met pour se terminer. Mais puisque nous permettront au joueur d'interrompre la séquence en heurtant la porte, nous ne pouvons pas savoir qu'elle va être la durée totale du cycle. De même, on ne peut pas utiliser la sortie Completed de la Matinee, puisque celle ci se déclenche au minimum deux fois lors d'un cycle sans interruption (ouverture et fermeture) et même plus si le joueur heurte la porte et la rouvre. Donc, je vais dupliquer la Matinee et séparer les mouvements d'ouverture et de fermeture. Pour 'désactiver' les trigger Used jusqu'à ce que le cycle soit terminé, je vais commencer par placer une 'Gate'. Les triggers vont déclencher la gate, qui se fermera automatiquement avec son AutocloseCount (compteur de fermeture automatique) de 1. Quand les deux Matinees seront finies, elles rouvriront la Gate et autoriseront donc le signal a passer une nouvelle fois. Je dois donc changer l'animation de ma Matinee de fermeture et je vais aussi sélectionner mes deux Matinees et cochez RewindOnPlay dans leur propriétés et régler leur mouvement sur WorldFrame à la place de RelativeToInitial. Finalement, l'event Hit Actor cause des problèmes car la Matinee de fermeture ne peut pas se terminer lorsque la porte change de direction. Donc j'ai ajouté un Delay qui a la durée totale de cette Matinee et je l'ai branché sur l'entré Play. Maintenant la Matinee va changer de direction lorsqu'elle est heurtée, et donc va se rejouer et essayer de fermer la porte.




Normalement, si nous voulons ajouter des sons, nous pourrions les ajouter dans le mover lui-même. Cependant, puisque nous avons deux Matinees, ca pourrait ne pas fonctionner correctement. Donc, je vais ajouter des Event Tracks dans mes Matinees et déclencher les sons "manuellement" par l'intermédiaire des actions PlaySound. Un va servir pour le son d'ouverture, un autre pour le son de fermeture et un dernier pour le changement de direction. Je vais cibler (target) la porte pour que les sons aient l'air d'en sortir. Si le joueur heurte la porte, je vais aussi avoir à éteindre le son de fermeture et à réactiver le son d'ouverture. J'ai aussi caché les connecteurs inutilisés pour essayer de rendre les choses visuellement moins compliquées.




Le système semble fonctionner correctement, mais je voudrais ajouter un indice visuel sur l'état des boutons (actifs ou non). C'est pourquoi je les ais dés le début convertis en Interpactors. Nous aurions la possibilité de les animer avec des Matinees de manière à ce qu'ils rentrent dans le mur lorsqu'on les activent, mais je vais simplement appliquer un SetMaterial sur eux, pour les faire passer d'un material lumineux à un material sombre. On souhaite que le material devienne sombre lorsque les boutons sont désactivés et lumineux lorsqu'ils sont activés. Donc quand le 'Use' du trigger est déclenché, cela va régler le material sur quelque chose de sombre. Quand la 'Gate' sera rouverte et pourra à nouveau être utilisée, nous changerons le material en quelque chose de lumineux. On réglera la cible du changement de material sur les interpactors boutons.




Le système est maintenant ce que je souhaitais en faire. Nous avons une porte activée par des boutons, qui se rouvrira lorsqu'elle heurtera un joueur, emet des sons corrects, et a des boutons qui indiquent s'ils peuvent être utilisés ou non.

6) Ajustements pour les modes solo/multi-joueur. Comme vous l'avez sûrement lu dans la section Mode Solo/Co-op/Multi-joueur, il y a beaucoup de considérations à prendre en compte pour n'importe quel système que vous créez. Votre système peut être dans un premier temps OK pour un mode solo. Mais vous devriez toujours vous poser quelques questions. Que se passe t-il si deux joueurs se battent à travers la porte ? En fait, il semble que cela soit OK. Et s'ils appuient tous les deux sur les boutons ? Bien, cela s'ouvrira de nouveau d'un côté comme de l'autre … cela semble donc bon. Si vous voulez que des PNJs puissent ouvrir la porte, vous aurez à ajouter quelque chose qui indique à l'intelligence artificielle d'activer les boutons. Sinon, le système à l'air bien complet comme ça. A moins que vous souhaitiez rajouter des lumières dynamiques ou des emitters...