|
Destructions Programmées - Destruction par Event/Dégâts
|
Utilisations: C'est une base que vous pouvez
utiliser pour de nombreuses séquences de destruction.
Tout ce que vous avez à faire est de trouver quels ingrédients
employer et les connecter ensemble de façon appropriée.
Vous pouvez utiliser ceci pour détruire des vitres, des
tables, des chaises, des bouteilles, ou des "sculptures"
de glace, des rochers, des colonnes, des portes, des murs, des
plafond, des sols … a peu près n'importe quoi en
fait.
Objets qui réapparaissent : Si, pour une raison, vous
voulez que les objets détruits réapparaissent,
vous avez plusieurs façons pour faire ceci, mais la manière
la plus simple serait :
a) remplacez chaque 'Destroy' par des Toggle
Hidden et des Change
Collision
b) Ajouter un Delay à la fin de la séquence
c) Connectez la sortie du Delay aux Toggle
Hidden et aux Change
Collision pour que les objets réapparaissent et retrouvent
leur collision.
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 en forme de cube dans ma map,
l'ai converti en Interpactor et l'ai modifié pour le
rendre plutôt fin.
Destruction par events ou Dégâts:
Les destructions dans un niveau peuvent être faites de
différentes manières, mais les deux façons
les plus communes sont avec un event dans le niveau (comme un
trigger touch) ou l'objet prenant directement des dégâts
(venant d'un joueur par exemple). Puisque l'un et l'autre sont
utilisés pour déclencher des destructions, je
ne vais faire qu'un système mais en ajoutant à
la fois un event trigger et un event damage même s'ils
ne seraient pas utilisés ensemble habituellement.
Je vais commencer par un système très simple et
ajouter des petits détails par la suite.
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 objet de la map qui sera détruit lorsqu'un joueur
entrera dans une zone ou lorsqu'il tirera dessus.
2) Rassemblons les ingrédients :
1 trigger
1 interpactor
1 action Destroy
1 event Trigger Touch (proximité)
3) Assemblons le tout
Dans la map, j'ai créé deux murs et placé
l'interpactor entre eux. Ensuite, j'ai placé le trigger
au milieu de l'interpactor et j'ai augmenté son rayon
de collision.
|
|
Du côté de Kismet, j'ai utilisé le trigger
pour créer un event Trigger Touch, et sélectionné
l'interpactor pour créer l'event Take Damage. Finalement,
j'ai ajouté une action Destroy et ciblé l'interpactor.
Dans les propriétés de l'event Damage, j'ai mis
le DamageThreshold à 10, le MinDamageAmount à
5 et le MaxTriggerCount à 0. J'ai également mis
le MaxTriggerCount de l'event Touch à 1, puisque l'on
va uniquement déclencher le système une seule
fois.
|
|
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 et d'éclairage de votre
interpactor. Lorsqu'il disparaît, est-ce que son ombre
disparaît également ? Ensuite pensez à tous
problèmes éventuels. Est-ce que le joueur peut
planter le système ? Une fois tous ces problèmes
réglés, il serait intéressant de perfectionner
le système parce que tel qu'il est maintenant il est
assez peu impressionnant.
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 quel n'a pas vraiment
besoin de changements. C'est simple, ça fonctionne et
il semble difficile de le planter.
Bien, maintenant améliorons le pour le rendre peu plus
fun.
N'oubliez pas que sur ce que je vais vous montrer, vous pouvez
bien sûr n'en prendre qu'une partie suivant ce que vous
souhaitez faire.
Reprenons notre recette de cuisine:
1) Que souhaitons nous faire ?
Nous allons faire un objet destructible qui aura deux niveaux
de destruction. Lorsqu'il sera partiellement détruit,
nous devrons activer un emitter qui cachera le changement de
static et aura un son approprié. Lorsqu'il sera complètement
détruit, il explosera avec assez de force pour blesser
ou tuer un joueur à proximité. Cela va également
éjecter des débris, activer des emitters pour
cacher le nouveau changement de static et va produire un gros
son d'explosion :) Prêts?
2) Gather the ingredients:
Rassemblez vos ingrédients.
2 events Take Damage
4 actions Toggle
2 actions Toggle Hidden
3 actions Destroy
2 actions PlaySound
1 Delay
1 action CauseDamageRadial
1 Mover (objet complet)
1 mover (objet endommagé)
1 KActor (Débris)
2 Emitters
1 RB_Thruster
3) Mélangeons le tout :
D'abord, nous allons positionner le mover "complet".
Puis je vais placer le mover "endommagé" à
l'intérieur du premier, ouvrir ses propriétés
et cochez bHidden pour le faire disparaître dans le jeu.
Je vais placer le KActor flottant un peu au milieu du mover
endommagé puisqu'il en sera la source visuelle et je
vais le cacher de la même manière que le mover
endommagé. Ensuite, je place un emitter au milieu du
mover complet pour masquer sa destruction et de la même
manière, je vais placer un deuxième emitter pour
le mover endommagé. Je vais aussi désactiver la
propriété AutoActivate des deux emitters. Puis
je vais ouvrir le actor browser, et placer un RB_Thruster. Il
aura besoin d'être désactivé manuellement
donc nous ajouterons cela au kismet. Je vais régler sa
propriété Thrust Strengh à 50, et je vais
l'Attacher au KActor dans
ses propriétés.
*Note : Même si les RB_Trhursters et les RB_RadialImpluses
peuvent être utilisés pour "jeter" des
KActors, le fait que les KActors soient des movers avec des
propriétés physiques a un impact non négligeable
sur les performances. Si vous avez besoin de créer des
débris, je vous conseille plutôt d'utiliser des
mesh emitters à la place.
|
|
Du côté de Kismet, nous allons d'abord créer
la destruction du mover complet qui se changera en mover endommagé.
Pour commencer, je vais créer un event Take Damage à
partir du mover complet. Le MaxTriggerCount est à 0,
et j'ai arbitrairement réglé le DamageThreshold
à 50. Lorsqu'il se déclenchera, nous devrons détruite
le mover complet, activé l'emitter avec un toggle, produire
un son et faire apparaître le mover endommagé.
De plus, puisqu'au départ le mover endommagé est
seulement invisible, si sa forme sort du mover complet, il pourrait
être touché avant ou en même temps que le
mover complet. Donc je vais créer l'event Take Damage
du mover endommagé et ne pas oublier de décocher
sa propriété 'bEnabled'. De cette manière,
l'event va être inactif jusqu'au moment désiré.
Et pour l'activer, je vais ajouter un Toggle pour l'activer
et ceci au moment ou le Take Damage event du mover complet se
déclenchera. Maintenant, nous devons finir la destruction
du mover endommagé. Nous allons donc détruire
le mover endommagé avec un Destroy, faire apparaître
le KActor débris et active le RB_Thruster, déclencher
le deuxième emitter et son son associé. Puis après
un Delay de 1 seconde, éteindre le RB_Thruster et détruite
le KActor pour qu'il ne reste pas dans le passage et gène
le gameplay. J'ai réglé les propriétés
du Take Damage "endommagé" de la même
manière que le Take Damage "complet".
|
|
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. Lorsqu'un mover disparaît,
est-ce son ombre disparaît aussi ? Ensuite, pensez à
tous problèmes éventuels. Est-ce que le joueur
peut planter le système?
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 système que
vous créez. Le système tel qu'il est là
ne semble pas besoin de changements. Cela fonctionne et il ne
semble pas possible de le planter. Il reste cependant des questions
a se poser si vous travailler avec l'intelligence artificielle.
En théorie, mais je suspecte que cela change grandement
en fonction des jeux ou des éditeurs que vous utilisez,
vous pouvez utiliser des toggle pour activer/désactiver
des pathnodes près du système et en utilisant
leur propriété bBlocked. Cependant, je vous recommande
de faire beaucoup d'expérimentations avant de décider
de les utiliser.
*Note: Même si j'ai utilisé deux interpactors séparés
pour mes deux états de destruction, il est possible de
n'en utilisé "qu'un". Dans ce cas, vous pouvez
utiliser une action SetStaticMesh
pour faire le changement vers la deuxième état.
Cependant, suivant les points de pivot de vos meshes, il se
peut que le second mesh ne soit pas à sa place supposée
lors du changement de mesh. Pour régler ce système,
vous devrez utiliser deux events Take Damage, le premier se
déclenchera après une certaine quantité
dégâts, et le deuxième après une
quantité plus importante. Le SetStaticMesh remplaçant
le premier Destroy du système précédent.
C'est donc une méthode un peu plus simple puisque vous
utiliser moins d'acteurs en même temps, mais si les points
pivots de vos deux statics posent problème alors la première
méthode est conseillée.
Je pense que c'est à peu près tout. Maintenant,
vous avez une base solide sur comment créer vos séquences
de destruction que vous pouvez adapter à des portes,
des tonneaux, des destructions en plusieurs étapes, à
peu près tout en fait.
|
|
|
|
|
|