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.
Pour cet exemple, j'ai également pris un static mesh
en forme de feuille plate et un material d'eau.
Après plusieurs expérimentations avec SkullKrusher101,
nous avons découvert que la manière de travailler
avec un liquide qui s'élève ou se baisse que nous
supposions la plus idéale et la plus simple, ne fonctionne
pas. Il se trouve que très peu de volumes ont un onglet
Movement dans leurs propriétés, ce "movement"
étant la clé pour faire bouger quoique ce soit
dans l'éditeur. Donc après avoir expérimenté
plusieurs techniques avec différents volumes et différentes
configurations de kismet, nous sommes arrivés à
la conclusion qu'il n'y a pas de méthode simple.
Par conséquent, et ce jusqu'à ce que quelqu'un
trouve une solution plus simple, nous avons trouvé que
la seule méthode pour faire qu'un liquide s'élève
ou se baisse est la suivante:
*Note : Il est supposé que vous savez créer un
volume d'eau dans l'éditeur. Rappelez vous, l'eau est
une combinaison de deux choses : un volume (qui gère
la physique, les particules et les sons) et une surface, en
général un static mesh, qui fait que votre eau
ressemble bien à de l'eau lorsque vu du dessus (et idéalement
aussi du dessous). La forme de votre volume d'eau est donc définie
par son static mesh de surface, la forme du volume physique
et/ou de ses frontières physiques (BSP, autres static
meshes, terrain).
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 bassin d'eau qu'un joueur peut faire monter ou descendre
avec des triggers.
2) Ingrédients :
2 triggers
2 interpactors (surfaces d'eau)
2 Matinees
2 events Trigger Used
2 actions Toggle
3) Mélangeons le tout :
Dans le niveau, j'ai créé un petit bassin carré
en BSP. Je vais créer un système pour "activer"
l'eau lorsque le joueur touche un trigger au fond du bassin,
ce qui va faire monter l'eau et permettre au joueur de sortir
du bassin. Une fois l'eau arrivée en haut, un autre trigger
va permettre de la faire redescendre.
|
|
Du côté de Kismet, je vais seulement m'occuper,
dans un premier temps, de créer le mouvement des surfaces.
Je vais utiliser deux interpactors en forme de feuille parce
que le material que j'ai choisit est seulement visible d'un
côté. Donc, j'ai retourné la deuxième
feuille et l'ai placée juste en dessous de la première.
De cette manière, nous allons avoir une surface d'eau
visible d'au dessus et d'en dessous.
D'abord, je connecte mes trigger Used de manière ce que
le trigger du bas déclenche une Matinee qui fera s'élever
ma surface d'eau et pour que celui du haut déclenche
une autre Matinee qui fera redescendre la surface. Dans les
Matinees, j'utilise deux groupes, un pour chaque feuille, et
règle leur Movement Track sur World Frame. Les events
Used se désactive d'eux mêmes par l'intermédiaire
de Toggles lorsqu'ils sont utilisés. L'event du trigger
qui sert à baisser l'eau est désactivé
par défaut en utilisant sa propriété bEnabled.
Ensuite, j'utilise les Completed des Matinees pour réactiver
leur trigger approprié. Les Matinees sont toutes les
deux réglées sur RewindOnPlay.
|
|
Maintenant nous devons rajouter les Dynamic Water Volumes. Donc
nous allons reprendre l'étape 2 mais avec des ingrédients
supplémentaires :
2) Ingrédients :
4 Dynamics Water Volume
9 Toggles
8 Delays
1 variable ObjectList
3) Mélangeons le tout :
Nous allons commencer par créer une série de Dynamic
Water Volumes qui seront tous désactivés par défaut,
et nous allons ensuite les activer progressivement, un par un.
Les volumes d'eau ne vont donc pas bouger. Ils sont mis les
uns au dessus des autres et vont donc permettre de faire "monter"
le niveau d'eau. Vous aurez sûrement à ajuster
leur hauteur et l'intervalle de temps entre leur activation
pour faire que le joueur monte de façon réaliste.
|
|
Donc basiquement, ce que nous allons faire est de les activer
successivement un après l'autre avec de petites durées
de temps entre chaque activation. Ma Matinee totale est de 5
secondes, donc je vais les activer toutes les 1 secondes. Si
nécessaire, vous pourriez assigner des events à
la Matinee (avec un Event Track) pour les activer. Je vais également
ajouter un Toggle qui les désactivera au lancement de
la map puisque le bassin est sensé être vide au
départ. Je vais utiliser un event Level
Startup pour faire ceci. Je vais aussi utiliser un ObjectList
pour regrouper tous mes volumes en une seule référence.
|
|
Voila exactement le même système global mais cette
fois, j'ai utilisé des events de la Matinee tous espacés
d'une seconde:
|
|
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. Bien, nous
avons des Toggles qui désactivent les triggers aux bons
moments donc là pas de problèmes et je ne vois
pas bien ce qu'il pourrait y avoir d'autre ...
Une autre petite chose que j'ai faite pour améliorer
l'effet sous l'eau est que j'ai superposé des PostProcess
Volumes sur mes Dynamics Water Volumes et les ais également
ajouter au système. Ces volumes PostProcess permettent
de donner l'impression de voir sous l'eau (flou, teinte …).
Les deux images suivantes sont avec et sans les Delays et incluent
ces volumes.
|
|
Voila exactement le même système global mais cette
fois, j'ai utilisé des events de la Matinee tous espacés
d'une seconde:
|
|
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. Le système tel qu'il est là
devrait fonctionner pour un mode solo ou un mode multi-joueur.
Mais si vous y faites de gros changements, vous aurez à
vous poser quelques questions : Que se passe t-il si deux joueurs
se battent au dessus, autours ou à l'intérieur
du bassin ? En fait, il semble que cela ne pose pas de problèmes.
Autres liquides: Changer l'eau en slime, lave,
déchets toxiques, jus de fruit ou autres liquides.
Même s'il existe déjà des volumes de lave
(Lava) ou de slime, il n'en existe pas de versions dynamiques.
Par contre, convertir un Water Volume en un lava volume (ou
Slime Volume) est très simple. Créer un Lava Volume,
verrouiller la fenêtre de propriétés (le
verrou se trouve en haut à gauche de la fenêtre).
Puis créer un Dynamic Water Volume. Maintenant ouvrez
les onglets du Lava Volume et du Dynamic Water Volume et changer
les propriétés du Dynamic Water Volume avec les
mêmes valeurs que pour le Lava volume. Il fonctionneront
donc de la même manière. Bien sûr, vous aurez
à changer le Material de la surface pour que ça
ressemble plus à du slime ou à de la lave.
|