Tutoriel couper un cube avec une épée Unreal Engine 4

 

Introduction

Dans ce tutoriel je vais expliquer pas à pas comment créer une Mesh qui se coupe à la collision d’une épée et tout ça grâce a bluePrint dans unreal ungine 4.

Pour ce tutoriel j’utilise la vesion 4.13.2 de Unreal Engine.

Etape 1 : Création du projet et de l’air de jeu

Dans un premier temps on va créer un nouveau projet en BluePrint et en Troisième personne, verifier bien de créer votre projet avec “With starter Content”, Cela nous permettra de ne pas commencer un projet et être nue comme un ver.

Je le nomme “Slicing a cube” de mon côté mais libre à vous de lui donner le nom que vous voulez.

Une fois le projet créé vous voici plongé dans l’interface visuel de Unreal Engine 4.

Voici ce que vous devriez obtenir une fois le projet Créer . Bien on peut maintenant passer à l’étape 2 !

Etape 2 : Création de la procédurale mesh

Maintenant que nous avons notre aire de jeu créer nous allons dans un premier temps créer une procédurale mesh donc qui nous servir de base pour créer votre cube ou notre sphère qui se coupe au contact de notre épée que nous allons également créer par la suite.

Pour commencer on va créer notre class BluePrint , Cela se trouve dans l’interface “BluePrints” haut de l’écran et “New empty Blueprint class…” et on crée un “Actor”. Placez le dans le fichier qu’il vous propose normalement cela devrait être le fichier “BluePrints” et nommé le “sliceMeshe”.

Normalement cela devrait ouvrir directement l’interface visuelle de votre sliceMeshe si ce n’est pas le cas , cherchez le dans les composants de votre projet et vous devriez normalement obtenir ceci :

Tout en haut à gauche cliquez sur le bouton “Add Component” et ajoutez le composant “Static meshe” et le composant “Procedural meshe” , ensuite prenez votre “Procedural meshe” et placez le à l’intérieur du “Static meshe” et placez votre “Static meshe” a la place du “default scene route

Vous devriez obtenir ceci.

Compilez et aller dans l’onglet “Construction Script” et placer vos composant “Static meshe” et le composant “Procedural meshe” dans le “Construction Script”.

Associer une fonction à votre “Static meshe” , la fonction “Copy Procedural Mesh From Static Mesh Compenent” et lier votre “Procedural meshe” à la fonction dans la méthode “Proc Mesh Compenent”et lier votre “Construction Script” à votre fonction et cocher dans votre fonction la checkBox “Create Collision

Vous devriez obtenir ceci

Compilez. Cliquez sur votre “Static meshe” dans l’interface a droite de votre écran , et sélectionnez dans l’interface détails les éléments “NoCollision” dans le “Collision Presets” et “Hidden in game”. Pour la “Procedural meshe” sélectionnez les éléments “BlockAll” dans “Collision Presets” et que “Simulate physics” soit coché.

Ensuite sélectionnez votre “Static meshe” et attribuez lui un static mesh dans l’interface détails et sélectionnez le “1M_CUBE”.

Double cliquer sur le “1M_CUBE” et une nouvelle interface pour modifier votre cube vient de s'ouvrir. Et veillez à cocher la case “Allow CPU Acces”, Sauvegarder et retourner dans votre interface du “Static meshe” et compilez.

A ce stade si on test de placer notre SliceMesh dans notre aire de jeu , et qu’on appuie sur Play , on peut remarquer que le cube n’est pas affecté par la physique et vas donc rester en l’air.

Pour palier à ce problème il faut retourner dans l’interface dédié à notre SliceMesh , selectionnez notre “Static meshe” et décocher l’option “Use complex as simple collision”. Faites un test , il devrait maintenant être affecté par la physique.

Etape 3 : Création de l’épée

Une bonne chose de faite ! Maintenant on passe à la création de l’épée.

Ne vous attendez pas à créer l’épée du siècle , ici le but est surtout de créer un élément qui va au contact de notre SliceMesh la découper en morceau quand un événement sera déclenché, l’événement sera le clic gauche de la souris.

Pour commencer il faut se rendre dans l’interface de notre personnage. Vous pouvez le trouver dans vos label “ThirdPersonCharacter” et cliquer sur “Edit ThirdPersonCharacter”, Vous devriez avoir cette fenêtre :

Rendez-vous dans le “ViewPort” et créer un nouveau composant de type “cube

Celui-ci devrait apparaître en plein milieu de votre personnage. Renommer ce cube en “blade” , déplacer votre “blade” dans votre personnage donc dans le “Mesh” et a droite dans les détails on va attacher notre épée à notre main gauche pour cela dans la section “Sockets” , chercher le Parent Socket : “hand_l”, Votre  “blade” c’est alors placer dans votre main gauche visuellement.

Maintenant on va aplatir et amincir notre “blade” pour que cela ressemble plus a une épée, je vous laisse utiliser les outils de mise en forme pour cela, ensuite réglé la location et la rotation à 0 de partout. Je vous laisse régler ensuite les positions de l’épée pour ça donne quelque chose comme ça :

Sélectionnez votre “blade” et dans “collision presets” sélectionnez “OverlapAll”.

Compilez et rendez vous dans l’onglet “Event Graph”.

Faites un clic gauche dans le BluePrint de préférence tout en bas des algo déjà existant , et ajoutez un evénements “Left Mouse Button”, ensuite créer une variable “cancut” , placer son setter a coter de l’événements et cocher la case pour la mettre a true, mettez un deuxième setter et laissez le bouton décocher. Liée l’événement “Pressed” Au setter a true et l’événement “Released” au setter a faux.

Ensuite on sélectionne notre épée et on la met dans le BluePrint à côté des setter et ajoutez lui une référence “Assign on component begin overlap”, On lie le setter true a “bind event to onComponentBeginOverLap” , et en sortie de notre “bind event to onComponentBeginOverLap” on lui ajoute un “doOnce”. On lie le setter False au “reset” du “doOnce

Pour le moment cela donne ça.

Dans le “Other comp” du  “onComponentBeginOverLap_Event_0” on va créer un “Cast to proceduralMesheComponent”, enlevé la liason du exec et liée le exec au “doOnce”. Ensuite on créer avec le ”As Procedural Mesh Component” du “Cast to proceduralMesheComponent” : “Slice procedural mesh”,  Cocher la case “Create Other Half” et dans cap Option sélectionnez “Create new section for Cap” et pour le matériel sélectionnez le même matériel utilisé pour l’épée , dans mon cas j’ai utilisé le “M_Metal_Gold”.

Cela devrait ressembler à ça pour le moment.

Avec votre “blade” créer une nouvelle fonction “GetWorldLocation” et connecter la “Return value” au “Plane position” du “Slice Procedural Mesh”.

Une nouvelle fois avec votre “blade” créer une nouvelle fonction “Get Up Vector” et connecter la “Return value” au “Plane normal” du “Slice Procedural Mesh”.

Ensuite créer la fonction “Set Simulate Physics” en sortie du “Slice Procedural Mesh” au “Out Other Half Proc Mesh” et cocher “simulate”.

Depuis  “As Procedural Mesh Component” de “Cast to proceduralMesheComponent” créer “Add radial Impulse”.

La sorti de “Set Simulate Physics” liée la a l'entrée de Add radial Impulse”.

Retourner la valeur de “GetWorldLocation” dans l’attribut “Origin” de “Add radial Impulse”, mettez l’attribut “radius” a 300 et l’attribut “Strength” a 500.

Et voilà cette partie est terminé , je vais résumer toutes les composent car cette partie est très difficile à écrire :

Mettez le tout dans un groupe de commentaire et nommer le “Slice”

A ce stade vous devriez obtenir ceci :

Il est temps de faire un test !

Si vous retournez dans votre espace de jeu , assurez de bien avoir votre sliceMesh dans votre aire de jeu , et cliquez sur “Play”

Essayez de découpez votre bloc en cliquant sur le clic gauche de la souris , normalement il devrait se découper à l’endroit ou vous avez effectuez votre clic !

Voilà une bonne chose de faites !

La fonctionnalitée est déjà fonctionnelle ! Seulement elle n’est pas très pratique, car pour le moment nous pouvons uniquement faire cela avec un cube , celui que nous avons définis dans notre sliceMesh.

On va régler ce petit problème pour que nous pouvions choisir notre Static Mesh et notre material à la volée , c’est à dire au moment ou l’on va placer notre sliceMesh en jeu !

Etape 4 : Optimisation de la static mesh

Pour cela rendez vous dans l’interface de votre sliceMesh sélectionnez votre StaticMesh et aller dans l’onglet Construction Script

Vous devriez obtenir ceci,

Pour commencer placer votre StaticMesh dans le bluePrint et affectez lui un “set StaticMesh”, placer l’exec du “construction script” dans l’exec du “set StaticMesh” et dans le New Mesh faites un “promote to variable”. Nommez votre variable “MESH”.

Affectez à votre StaticMesh un “set Material”, et placer l’exec de votre “set StaticMesh” dans l’exec de votre “set Material” et de même dans le Material faites un “promote to variable” , variable que vous allez nommer “MATERIAL”.

Dans l’exec sortie de votre “set Material” affectez lui un “set World Scale 3D” dans le New scale faites un “promote to variable” que vous allez nommer “SCALE

Ensuite connecter l’exec sorti de votre “set World Scale 3D” a l’exec entrée de votre “copy procedural mesh from static mesh component”.

Et vous n’avez plus qu’a connectez votre “StaticMesh” au Target de votre “set World Scale 3D”.

Rendez vos variables “MESH”, “MATERIAL” et “SCALE” : “Editable”, cela se trouve dans l’onglet détails à droite lorsque vous sélectionnez vos variables.

Pour résumé vous devriez obtenir ceci :

N’oubliez pas de compilez !

Retournez dans votre aire de jeu et vous devriez vous apercevoir que votre SliceMesh a disparu de votre aire de jeu.

Elle n’a pas tout à fait disparu, elle ne contient juste plus de StaticMesh ni de material.

Si vous sélectionnez votre SliceMesh dans l’air de jeu sur l’interface Details à droite et dans la partie “Default” vous devriez obtenir le nom de nos variable fraichement créer

  • MESH
  • MATERIAL
  • SCALE” :

Vous n’avez plus qu'à sélectionner la Mesh qui vous convient ainsi que son Matériel , en oubliant pas de lui donner une taille pour ma part ce sera ceci :

Pour créer une nouvelle SliceMeshe , vous n’avez qu'à copier/coller votre sliceMesh et changez ces variables ci dessus par exemple avec une sphere :

Assurez vous simplement que quand vous sélectionnez une Mesh , ouvrez son interface , cocher l’option “Allow CPUAccess” et ajoutez une collision dans le menu collision en haut de l’interface “Add 26DOP Simplified Collsion”.

Testez ! Si votre cube apparaît bien mais pas votre boule , c’est normal j’ai également eu le même problème , c’est simplement car dans SliceMesh on n’a pas réinitialisé la mesh et le matériel , ces propriété son restés sur le cube.

Pour régler cela rendez vous dans l’interface de votre SliceMesh et dans l’onglet “Static Mesh” faites un clear et cela devrez vous enlevez votre cube et mettre “None” a la place :

Retournez dans votre espace de jeu , Lancer le play , et magie cela devrait fonctionnée votre sphére et votre cube apparaisse !

Et voila le resultat :

Etape 5 : Conclusion

Voila nous avons créer un petit systéme permettant de pouvoir découper en morceau nos StaticMesh présent dans l’air de jeu et ça c’est déjà pas mal !

Alors tout n’est pas parfait et il reste des améliorations à faire , comme faire ça avec une vrai épée et faire une animation au moment du clic gauche pour donner des coups d’épée. Mais le plus gros est actuellement fait et cela marche plutôt bien !

Si vous rencontrez des difficultés a réalisé ce tutoriel , chose que je comprendrez tout a fait car j’ai trouvé trés difficile l’éxercice de devoir expliquer a l’écris des étapes a faire dans une grosse interface visuelle comme contient Unreal Engine.

Je vous laisse le lien Google Drive qui contient le dossier Unreal Engine utilisé pour ce tuto.

https://drive.google.com/open?id=0B__wiUCuESwddjU3aXJINGdPcVU

Enjoy !

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *