*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 de Vitres



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 de vitre trouvé dans le package HU_Deck et dans le sous répertoire SM/Meshes (S_HU_Deck_SM_Fwindow_Glass). Pour arriver à "casser" des vitres, il existe plusieurs solutions. Je vais seulement expliquer la manière la plus simple pour l'instant. Il existe d'autres méthodes plus réalistes, mais ce gain en réalisme et en qualité visuelle ne contrebalance pas vraiment le coût très élevé en terme de performances. Si vous avez absolument besoin d'utiliser une de ces méthodes plus réalistes alors je vous conseillerais de le faire de façon limitée et dans des lieux isolés.

*Note : En utilisant le tutorial sur les Destructions, vous devriez pouvoir faire ceci tout seul en utilisant les informations fournies dans ce tutorial. En fait, je vous conseille même d'essayer de le faire de cette manière. Cependant, du fait du grand nombre de demandes pour ce système en particulier, je me suis senti un peu obligé d'en faire un tutorial spécifique.

Vitres Destructibles: Quand le joueur ou des bots, tirent dans la vitre, cela va entraîner sa destruction. 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 ?
Des vitres destructibles.

2) Ingrédients :
1 interpactor (vitre)
2 emitters (éclats de verre)
1 action Destroy
1 action Toggle
1 event Take Damage
1 action PlaySound

3) Mélangeons le tout : j'ai placé mon interpactor/vitre, et j'ai créé un encadrement en BSP autours. Puis j'ai placé les deux emitters au milieu de la vitre, un peu espacés l'un de l'autre pour donner l'impression que les éclats viennent de la vitre complète. J'ai désactivé AuotActivate dans les propriétés des emitters.




Du côté de Kismet, je vais créer l'event Take Damage à partir de l'interpactor vitre (vérifiez que sa collision est réglée sur bBlockAll). Je vais donc détruire l'interpactor et déclencher les emitters. Je n'oublie pas de mettre à 0 le MaxTriggerCount de l'event Take Damage, je règle également son DamageTreshold à 50 et je décoche le bPlayerOnly. Je vais ensuite ajouter un PlaySound pour le son de la vitre cassée lorsque le système est déclenché.




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. Honnêtement, je ne vois trop de problèmes avec ce système.

Mais si nous voulions que la vitre réapparaisse après un certain temps ? Comment peut-on la ressusciter ? La réponse est qu'on ne peut pas. Alors au lieu de la détruire et d'essayer de la ressusciter, nous pouvons plutôt donner l'illusion qu'elle a été détruite et donc pouvoir la faire réapparaître quand on veut. Retournons donc à l'étape 2 et ajoutons d'autres ingrédients à notre recette:

2) Ingrédients supplémentaires :
1 Toggle
2 Toggle Hidden
2 Change Collision
1 Delay

3) Mélangeons le tout. Lorsque l'event Take Damage se déclenche, il se désactivera de lui-même par l'intermédiaire d'un Toggle. Au même moment, nous allons supprimer la collision de la vitre avec un Change Collision (dans lequel j'ai décoché Block Actors et Collide Actors). Toujours au même moment, nous allons rendre l'interpactor vitre invisible avec le Toggle Hidden et déclencher les emitters. Ensuite, nous allons ajouter le Delay que l'on règle à 60 secondes. Si vous le vouliez, vous pourriez faire un retard aléatoire en connectant un Random Float sur le Target du Delay. Après le Delay, nous allons rendre l'interpactor de nouveau visible et lui rendre sa collision (cochez Block Actors et Collide Actors dans les propriétés du Change Collision) et également réactiver l'event Take Damage par l'intermédiaire du Toggle.




4) Testons le. Lancer le jeu et testez le, cela marche 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. Honnêtement, je ne vois trop de problèmes avec ce 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 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 un ou plusieurs joueurs se trouvent dans la zone de la fenêtre quand celle-ci est détruite ou lorsqu'elle réapparaît ? En fait, j'en sais rien, vous aurez donc à le trouver par vous-même.

Vous cherchez à avoir quelque chose de plus réaliste?
Ce qui suit est sûrement possible, mais encore une fois, je ne vous le conseille pas pour des raisons de performances.
Au lieu de suivre la méthode simple ci-dessus, et seulement si vous savez modéliser, il est possible de créer une vitre pré-brisée et importer les morceaux un par uns. Ensuite vous pouvez changer tous ces morceaux en Kactors et assembler pour reconstituer une vitre complète. Vous pouvez ensuite les configurer pour qu'ils répondent à des events Take Damage, leur assigner un glass physical material, et permettre qu'on puisse leur tirer dessus individuellement.
Problèmes potentiels de cette méthode :
- pas d'emitter de vitre cassée. Vous auriez à connecter beaucoup de ces morceaux (si ce n'est tous) à des Toggles pour activer des emitters "individuels" et la superposition de tous ces enchaînements (tirs, morceaux de vitre détruits, déclenchements d'emitters) pourrait créer des anomalies et rendre le tout pas si réaliste que ça.
- Si vous mettez beaucoup de morceaux, il se peux vous vous retrouviez avec la situation où vous aurez des morceaux situés au centre de votre vitre, et qui n'auraient pas reçu de dégâts, se retrouvant à flotter de façon très peu réaliste alors que tous les autres morceaux autour auraient été détruits. Pour palier à ce problème, vous pouvez connecter des events Take Damage à chaque morceau et tous les régler sur RB_RadialImpulse, ce qui va propager les dégâts aux alentours.

SI vous voulez tout de même garder des morceaux sur la périphérie de votre fenêtre mais en gardant un système simple comme expliqué plus haut, vous aurez besoin de deux meshes, un pour la vitre entière et un second pour la vitre cassée. Vous pouvez facilement cacher la version cassée et la rendre visible lors de la destruction.