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