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