Objets

Comment attacher des objets à voler sur certains AI
Livres et parchemins
Comment équiper le joueur
Les passe-partout
Les échelles
Comment ajouter des propriétés physiques à des objets
Donner une arme différente à un Ai
Créer une potion d'invisibilité
Les lucioles (will-o-wisp, les boules de lumière)

Comment ajouter des propriétés physiques à des objets

(Mandrake -- tr : Stefan Key)

Bien qu'il y ait déjà des objets de l'actor class browser qui ont des propriétés physiques préconfigurées (Par exemple, les caisses et les tonneaux dans WorldObj > SetDressing), vous aurez envie d'ajouter plus de réalisme "physique" à n'importe quel objet, comme une statue ou un sofa, pour qu'on puisse le pousser ou le faire tomber.

Etape 1

Ouvrez le static mesh browser (si ce n'est déjà fait) pour placer un objet statique (static object) dans votre map. Nous allons prendre une croix de Marteleur (hammerite cross).

Allez dans STATUE et sélectionnez HAMhammerstatue. Si vous avez du mal à voir un objet de la fenêtre précédente du browser, faites un clic droit et faites un glisser vers le bas à droite (vers le sud-est, si vous préférez) avec la souris. Une fois votre static mesh sélectionné, faites un clic droit quelque part sur la map et choisissez Add SM: 'meshname' here.

Etape 2

Comme votre objet va bouger, vous devriez ajouter une ombre dynamique si vous ne voulez pas avoir quelque chose d'un peu bizarre. Faites un clic droit sur l'objet et choisissez l'option qui se trouve en haut StaticMeshActor Properties.

Déroulez les propriétés, allez sur Render et si vous ne voyez pas Shadow_Casting_True, faites un clic droit sur Render, Add property, choisissez CastShadows dans la liste de droite, Add property puis assurez-vous qu'il y ait Shadow_Casting_True.

Etape 3

Maintenant il faut indiquer au moteur et au procédé des rendus (le renderer) qu'on peut déplacer l'objet et qu'il faut utiliser des propriétés physiques (havok physics) pour contrôler les mouvements.
Retournez dans les propriétés du StaticMeshActor, déroulez Actor, nous avons besoin de bNotMoveablePhysics et bNotMoveableRender. S'ils n'y sont pas, faites un clic droit sur Actor, Add property, sélectionnez les deux dans la fenêtre de droite (multi-sélection possible avec la touche CTRL) et ajoutez les propriétés.

Règlez-les sur False tous les deux.
Je serai plus bref sur la façon d'ajouter les propriétés et ne ferai que l'énumération.
Dans Movement, vous devrez ajouter les physics, sélectionnez PHYS_Havok.

Etape 4

Maintenant nous pouvons personnaliser les propriétés physiques de l'objet. Faites un clic droit sur Properties, sélectionnez Physics dans la colonne de gauche et faites une multi-sélection : Friction, InitialHavokState, MassPounds, et StartActive, et ajoutez-les.
Retournez dedans et ajoutez Physics Sound (colonne de gauche) ObjWeight (colonne de droite).

Retour dans la fenêtre des propriétés, réglez Friction à 0.5, assurez-vous que InitialHavokState est réglé à Havok_HavokControlled, mettez MassPounds à 50 puis réglez StartActive à False.

Dans PhysicsSound > ObjWeight, mettez Weight_Heavy.

Positionnez correctement la croix sur le sol et démarrez votre map. Vous devriez marcher dessus et la faire tomber.

Un peu plus d'explications sur les réglages.

Le paramètre bNotMoveablePhysics est un signal pour l'engin que l'objet peut être déplacé, et qu'il affecte la génération du NavMesh (la grille qui permet aux IA de se déplacer sur la map).

Quand l'option est mise sur True (par défaut), le Navmesh se construit autour de l'objet (ce qui fait que les IA essayent de marcher autour de lui). Alors que sur False, l'objet est ignoré par le Navmesh. (Les IA ne le "voient pas", ils essayent de passer à travers et essayent de le pousser). Il doit être mis sur False pour qu'un objet puisse être bougé.

Le paramètre bNotMoveableRender est un signal pour le renderer qui doit soit précalculé un modèle, soit le calculer dynamiquement.

Quand vous le laissez sur True, vous pouvez pousser un objet "physiquement" mais la représentation visuelle reste à la même place J. Vous vous retrouvez avec un objet invisible qu'on peut pousser et un fantôme visible que vous pouvez traverser… (amusant, mais pas vraiment utile)

Le paramètre Friction contrôle le montant de "poussée" (ou traînée) entre les objets de surface et les autres objets. 0.5 est un bon début mais si vous voulez que l'objet glisse facilement sans se renverser (comme un sofa), il faudra peut-être le régler à un niveau bas de 0.1, sinon il aura tendance à coller.

Par contre, un grand objet fin que vous voudrez renverser plutôt que faire glisser, nécessite un niveau de friction plus élevé, 0.5 ou plus ainsi la poussée est plus grande et l'objet aura tendance à tomber. Un objet très lourd avec un haut niveau de friction ne peut pas être du tout poussé par Garrett.

MassPounds est le paramètre du "poids virtuel" de l'objet, il détermine la facilité avec laquelle on peut le pousser ou le faire tomber, selon la force de Garrett.
La valeur 50 est pour un objet léger facile à pousser, les valeurs allant de 200-500 pour des objets lourds que l'on peut tout de même pousser alors qu'une valeur de 2000 est trop lourd dépendamment de la friction et de la zone de contact de la surface. Les choses qui ont une valeur inférieure à 200 peuvent être renversées par des flèches.

Le poids affecte apparemment aussi les dommages que subissent les IA quand quelque chose leur tombe dessus. Un poids de 200 ne leur fait pas trop mal, mais un poids de 2000 tuera un IA s'il lui tombe dessus.

Le paramètre StartActive contrôle la simulation des propriétés physiques de l'objet qui doit soit commencer immédiatement ou après avoir été touché par un autre objet mouvant (Garrett, un IA, d'autres objets comme des tonneaux lancés, etc…).

Le principal atout que je vois dans ce paramètre est l'économie des ressources du CPU (processeur). Si on ne met pas StartActive à False, CHAQUE objet avec des propriétés physiques dans votre map (même de petits objets, comme les tasses, etc…) aura une simulation de ses propriétés calculée en continu même si le joueur ne les touche jamais.

Donc, normalement, chaque objet commençant le jeu dans un état "stable", comme par exemple un tonneau posé sur le sol, devrait avoir le paramètre StartActive mis sur False pour conserver les ressources.

Mais il peut y avoir des effets secondaires étranges si vous ne faites pas attention au positionnement des objets : si l'objet est légèrement au-dessus du sol, si vous ou un autre objet le touchez, il retombera au sol.Si c'est un objet qui peut rouler, comme une charrette, et qu'il est placé sur un angle pas très stable, il roulera en avant ou en arrière quand il sera touché et qu'il se "réveillera". Un objet positionné en l'air restera ainsi jusqu'à ce qu'on le touche, puis il retombera au sol.

Si vous mettez StartActive à True, la simulation des propriétés physiques des objets débutera immédiatement, par exemple un tonneau placé en l'air retombera aussitôt que le jeu commence.

Le paramètre PhysicsSound > ObjWeight affecte le son qui est joué quand un objet est traîné au sol ou quand il tombe.

Weight_Light fait des sons légers (comme ceux d'un verre), Weight_Medium sonne comme un tonneau et Weight_Heavy sonne comme une statue de pierre.

Certains objets ne font pas de bruit, même quand ObjWeight est mis, peut-être à cause des meshes de ces objets qui ont leurs ressources mal assignées. Pour rendre un objet bruyant, ajoutez la propriété Material > MaterialOverride et choisissez une des ressources prédéfinies (predefined materials). Cette propriété ne détermine pas le type de son que l'objet fait quand il tape dans quelque chose. Si vous mettez MaterialOverride à stone et ObjWeight à Weight_Medium, vous aurez le son d'un tonneau.

Pour vous montrer quelques exemples de ce qui peut être fait, voyez mon test.

Tous les objets de la map sont des objets que l'on peut déplacer, je n'ai pas remarqué de ralentissements dans le jeu. Même les lampadaires peuvent tomber.

Au sommet de certains escaliers, il y a un tonneau prêt à tomber mais pour qu'il tombe quand le jeu commence, son paramètre StartActive est à True.

D'autre part, à la gauche de la position de départ, il y a un grand pilier penché, son paramètre StartActive est à False. Il restera ainsi jusqu'à ce que quelque chose (même une flèche) le touche et le fasse tomber. Tirez une flèche bruyante près de la base du pilier pour qu'un garde le fasse tomber.

 

Tutoriels sur T3ed
t3ed.tutoriel.free.fr