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



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.