Dernière mise à jour : 22/06/2017 à 15h37

Current Project : ...

Index des tutoriaux

Vitres cassables

Introduction

Les vitres cassables étaient de simples actors paramétrables sous l'Unreal Engine 1.0, mais ne convenant pas au multi-joueurs, ils ont été simplement retirés de la version suivante du moteur, d'autant plus que l'effet est assez daté visuellement.
Pour recréer l'effet, il est nécessaire d'utiliser une combinaison d'actors. Un trigger placé autour de la vitre, réagira aux tirs et déclenchera le mouvement hors de vue de la vitre (un mover), et l'émission de Mesh représentant les éclats. Un son peut également être joué.

Le mover

Pour commencer, choisissez l'endroit où vous voulez créer cette fenêtre.

Scène de base

Il faut ensuite un Static-Mesh qui figurera la vitre intact. Il y a tellement peu de chances de réussir à en trouver un adéquat dans les packages du jeu que je vous suggère d'en faire un aux bonnes dimensions : créez un simple cube de la taille de votre fenêtre et de huit unités d'épaisseur (à moins que vous ne cherchiez à faire une énorme vitre pare-balle ou un hublot de vaisseau spatial, voir plus large rendra le tout assez bizarre), et texturez là avec une texture de vitre. Il y en a diverses sortes dans le groupe "Glass" du package UcGeneric. Une fois les textures ajustées, faites clic-droit, Convert, To Static Mesh et renseigner les divers champs en choisissant comme package "MyLevel".

Import

Ouvrez le Static-Mesh browser et sélectionnez vôtre vitre. Ajoutez-là en tant que Mover en cliquant sur le bouton correspondant : Add Mover

L'emitter

Afin de générer les éclats de vitre, il va falloir créer un Static Mesh tordu avec la même texture que votre vitre. Un simple cube déformé fera l'affait, et vous pouvez créer quelque chose d'un peu biscornu avec le 2DShape editor, mais se contenter d'un simple cube donnera l'étrange impression d'une fenêtre entièrement constituée de dés ou d'apéricubes (ce qui peut être un choix, mais bon...). Convertissez votre oeuvre en Static Mesh et ajoutez dans votre map un actor Emitter, en prenant garde à ne pas le confondre avec son homologue, le Xemitter.

Emitter dans l'actor Browser

Placez-le au milieu de la fenêtre, de manière à ce qu'il soit en travers de la vitre. Dans ses propriétés, dans la catégorie "emitter", ajoutez un nouvel objet, et dans le petit menu déroulant, choisissez Mesh Emitter.
Paramétrez l'emitter de manière à ce que les particules tombent avec une vitesse convaincante. Je suggère de mettre une accélération assez basse dans Z, de l'ordre de -500, et dans l'onglet rotation, de mettre un spin sur tout les axes afin de donner un caractère très aléatoire au mouvement des particules. N'hésitez pas également à tripoter les options de collisions. Activé les collisions des particules et modifiez les valeurs de Damping (rebondissements), pour simuler la gravité.

Débris tombant

Paramétrage

Commençons par configurer le mover pour que lors du tir il disparaisse automatiquement du champ de vision du joueur. Donc, clic droit sur votre mover, Mover=> Key1, puis déplacez-le jusqu'à ce qu'il soit au dessus des pièces comme ceci :

Fenêtre en position ouverte

Reproduisez en faisant Key0. Le mover retourne à sa position initiale, celle de fenêtre intacte bouchant hermétiquement l'ouverture. Comme le mouvement doit être instantané au moment où un projectile touche la fenêtre, dans les propriétés, onglet mover, mettez MoveTime à 0. Le Mover se déplacera instantanément (0 secondes).

En arrivant à sa key 1, le mover déclenche son Event. Mettez la même chose dans l'Event du mover et dans le Tag de l'emitter, pour que l'un déclenche l'autre.

Trigger

Pour faire en sorte que le mover ne se déclenche que lors du passage d'un projectile et pas d'un joueur ou d'un autre actor, il faut modifier le type d'élément qui peut l'activer. Malheureusement, les movers ne proposent pas de se déclencher lors du tir, et les différents types de "bump" (les actors les activent en les percutant) se limitent aux joueurs, aux créatures ou bien à "any bump", c'est à dire n'importe quoi. Il faut donc ajouter un trigger avec qui, lui, aura la propriété de ne s'activer qu'au contact des tirs, et qui déclenchera le bris de glace.

Insérez un trigger à peu près au niveau de la fenêtre. Dans l'actor browser Trigger=>Trigger.

Insertion du Trigger

Dans ses propriétés, et dans l'onglet "trigger", mettez "Trigger Type" à TT_Shoot. C'est la propriété qui détermine le type de contact qui pourra déclencher l'event. Paramétrez ensuite la même chose dans l'event du Trigger et dans le tag du Mover afin que ce dernier soit déclenché dès que le trigger reçoit un projectile.
Dans l'onglet Collision du Trigger, réglez CollisioHeight et CollisionRadius de manière à ce que le rayon d'action du trigger comprenne toute votre vitre. Pour visualiser le rayon dans les vues, faites un clic droit sur l'entête grise, et dans "Actors", activez "Radii View".

Rayon du Trigger Ajusté

Pour que le mover réponde à l'event du Trigger, dans les propriétés du Mover, onglet "Object', mettez Initial State à TriggerToggle.

Activer/Désactiver l'Emitter

Pour qu'un Emitter puisse être activé et désactivé à volonté, il y a plusieurs propriétés à modifier dans ses options, et il y a un petit tour de passe-passe à faire pour éviter quelques bugs génant.

Premièrement, il faut que l'emitter ne soit pas activé en début de partie. Dans les propriétés de l'emitter, onglet Local, mettez bDisabled à Vrai. Cela le désactivera, et il sera donc activé par le mover qui se mettra en route. Ensuite, mettez bRespawnDeadParticles à Faux, pour que les particules ne jaillissent pas en flot continu, bien après que le tir ait eu lieu.

Si vous testez tout de suite, vous verrez que tout marche comme vous voulez au niveau de l'effet (sous réserve que vous aillez paramétré l'emitter de manière correcte), mais si vous utilisez une arme comme le minigun ou le fusil d'assaut, bref, une arme aux tirs répétés et rapides, la vitre semble "clignoter", car vous n'arrêtez pas d'activer le trigger et donc de déclencher le mouvement du mover. Pour éviter cela, il a deux manières de procéder :

La première est de lier le trigger et le mover par l'attach tag (en mettant le tag de votre mover dans l'attach tag du trigger, onglet "movement" des propriétés) : Le trigger sera alors entrainé par le mover et l'effet sera donc impossible à réactiver tant que la vitre ne sera pas revenue en place.

L'autre est de mettre l'InitialState du mover en mode "TriggerOpenTimed". Le mover restera au sommet de sa trajectoire pendant le temps en secondes indiqué dans "Stay Open Time" (onglet "Mover).

Résultat final

2005-2016, by Hellkeeper.

Valid XHTML 1.1 CSS 2.1