Comment briser un objet en fragments plus petits dans l'unité

Dans ce didacticiel, je vais vous montrer comment créer un effet de fragmentation simple pour votre jeu Unity. Au lieu de simplement "supprimer" une caisse (ou tout autre objet) quand elle est touchée ou détruite, nous pouvons la scinder en morceaux plus petits.


Exigences

Pour ce didacticiel, vous aurez besoin de la version la plus récente de Unity et d'une expérience de base. Pour les effets plus avancés plus loin dans le didacticiel, un outil de modélisation 3D sera également nécessaire. Si vous n'en avez pas ou si vous ne souhaitez pas modéliser les objets vous-même, je les ai inclus dans les téléchargements sources. (Les fichiers Unity eux-mêmes y sont également disponibles.)

Dans la version de base de cet effet, un cube sera détruit, laissant plusieurs fragments dans son sillage qui tomberont de manière réaliste au sol:

Plus tard, nous changerons le cube pour un modèle de tonneau plus compliqué:

Vous pouvez l'essayer vous-même ici:

Cliquez pour essayer la démo. (La démo de cube est disponible ici, aussi.)

Configuration de base

Créez un nouveau projet Unity et ouvrez une nouvelle scène. Créez un plan, qui agira comme notre terre, et un cube, qui sera l’objet destructible. Également, placez une lumière directionnelle pour rendre les choses plus visibles. Créez deux nouveaux matériaux et assignez-les au sol et au cube, de manière à pouvoir les distinguer, et déplacez la caméra pour que tout soit visible:


Détruire le cube

Il y a plusieurs façons de "détruire" le cube. Pour l'instant, nous adopterons l'approche la plus simple possible.

Créez un nouveau fichier JavaScript et nommez-le destructionController.js. En cela, nous allons mettre toutes les fonctionnalités de suppression du cube et de création des fragments. Ajoutez-y les lignes suivantes:

 function Update () if (Input.GetKey (Keycode.space)) Destroy (gameObject); 

Ajoutez maintenant le script au cube en le faisant glisser. Commencez le jeu et faites un essai. Si vous appuyez sur espace, le cube doit être supprimé.

Après l'avoir supprimé, il n'apparaîtra plus dans la hiérarchie, comme vous pouvez le voir sur la capture d'écran..


Créer les fragments

Créez maintenant huit cubes plus petits. ce seront les "fragments" du cube actuel. Donnez-leur le même matériau que le cube. (Ne vous inquiétez pas pour le look, nous leur donnerons un look génial plus tard.) Ils devraient ressembler à ceci:

Empilez les 8 cubes pour former un seul cube plus grand, sans qu'ils se croisent:

Donner à chaque cube un corps rigide, définir leur Masse à 22, Activer utiliser la gravité, et désactiver est cinématique. Cela fera tomber les fragments et utilisera la physique. Si vous le souhaitez, vous pouvez modifier ces valeurs ultérieurement pour obtenir des résultats mieux adaptés à votre jeu..

Maintenant, groupez les cubes sous un nouveau vide gameObject et l'appelle resteCube. Lorsque le cube d'origine est détruit, il sera remplacé par ce nouvel objet composé de cubes plus petits..

Faites glisser le resteCube objet dans le dossier du projet pour en faire un préfabriqué. Une fois qu'il est en sécurité dans le dossier préfabriqué, supprimez-le de la scène principale et il est prêt à être utilisé..


Faire apparaître les restes

Ajouter les lignes en surbrillance au destructionContrôleur scénario:

 var reste: GameObject; function Update () if (Input.GetKey (Keycode.space)) Instantiate (reste, transforme.position, transforme.rotation); Détruire (gameObject); 

Cela créera une copie des restes à la position exacte du cube. Ensuite, le cube sera supprimé, donnant l’illusion que le nouveau est en réalité l’ancien, mais "cassé".

Pour que cela fonctionne, vous devez attribuer manuellement les restes au cube. Cliquez dessus et dans le Inspecteur vous devriez voir un onglet contenant le Contrôleur de destruction scénario. Il devrait y avoir une fente appelée Restes, qui devrait être actuellement vide. Faites glisser le restes préfabriqué du dossier du projet dans cet emplacement. le Contrôleur de destruction script dans le Inspecteur devrait maintenant ressembler à ceci:


Premières optimisations

Faites un essai! Si tout est configuré correctement, lorsque vous appuyez sur espace, les restes doivent remplacer le cube. Si vous êtes chanceux, ils devraient alors tomber par terre.

Donc, ce cube de base:

… Devrait se transformer en quelque chose de semblable à ceci:


Je n'ai pas eu de chance

Malheureusement, il n’est pas garanti que les fragments s’effondreront de façon agréable. Heureusement, il existe des moyens de résoudre ce problème.

Créer un nouveau vide gameObject et lui donner un collisionneur de sphère, mais pas de corps rigide. Tirez les restes dans la scène pour pouvoir les éditer. Ajoutez l'objet collisionneur de sphères aux restes et placez-le de manière à ce qu'il croise certains des cubes:

Maintenant, les fragments vont immédiatement entrer en collision avec la sphère, créant un effet de dégringolade:


Enlever les fragments

En fonction du jeu que vous construisez, nous ne pouvons pas nous permettre de trop nombreux "éclats" à la fois dans une scène. La solution simple consiste à les supprimer au bout de quelques secondes. Pour ce faire, créez un nouveau fichier JavaScript et nommez-le. selfDestruct.js. Mettez le code suivant dedans:

 function Start () rendement WaitForSeconds (4.0); Détruire (gameObject); 

Lorsque l'objet est créé, il attend quatre secondes, puis se supprime. Ajoutez ce code au restes objet. Si vous détruisez maintenant le cube et créez les fragments, les restes se détruiront après quatre secondes.

Et c'est tout! Vous avez maintenant les bases pour qu'un objet soit "fragmenté" efficacement en plusieurs morceaux plus petits lorsqu'il est détruit. Vous pouvez utiliser cet effet tel quel, mais allons un peu plus loin et voyons comment l'utiliser avec un objet plus complexe..


Utiliser un objet réel au lieu de cubes

Maintenant que le système de base est en place, nous pouvons le rendre plus joli en remplaçant les cubes par des objets réels..

Si vous êtes un expert dans un outil de modélisation 3D, vous pouvez créer vos propres objets. Sinon, ou si vous n'en avez pas, vous pouvez obtenir le fichier 3D préparé à partir du téléchargement source..

Copiez le fichier dans votre dossier de ressources et les modèles 3D seront automatiquement importés pour votre utilisation. Avant de les utiliser, cliquez sur le fichier dans le Asset Explorer et assurez-vous que les fichiers source sont importés correctement à un facteur d'échelle de 1 (ne pas 0,1 ou 0,001; cela ne fait que compliquer les choses).

Si vous regardez les objets, vous pouvez voir un champ appelé filtre à mailles dans le Inspecteur. Si vous cliquez dessus, vous obtenez une liste de toutes les mailles disponibles dans le projet. Maintenant, remplacez tous les cubes du reste du cube par des pièces de tonneau.

Le cube intact obtient le baril engrener; les plus petits fragments de cube ont besoin des mailles barrel_fragment_01 à barrel_fragment_08. Une fois ceux-ci assignés, réglez leurs postes locaux sur (0, 0, 0). (Leurs points de pivot ont été définis de manière à pouvoir être facilement mis à zéro de cette manière.)

Au lieu d'un collisionneur de boîtes, un collisionneur de mailles serait beaucoup plus pratique. Supprimez tous les colliders de boîte sur les fragments et remplacez-les par des collider de maillage. Vérifiez chaque collisionneur de maille et assurez-vous que le maillage correct a été appliqué à chacun, barrel_fragment_01 a besoin de barrel_fragment_01 maille, etc.).

Ceci fait, définissez tous les collisionneurs de maillage sur convexe. (Un collecteur de maillage non convexe ne peut pas entrer en collision avec d'autres collisionneurs de maillage non convexe. C'est une opération de programmation.) Supprimez également le collisionneur de sphère que nous avons ajouté aux restes, car cela pourrait ne pas être nécessaire.

Si tout est configuré correctement, vous devriez avoir un baril qui se séparera en huit morceaux plus petits.


Détails supplémentaires possibles

Le même système peut également être utilisé pour ajouter d'autres effets à la destruction. Avez-vous une explosion? Ajoutez-le aux restes! Ajouter des sons, pour une satisfaction fissure. Mettez un effet de particule dedans, créant une petite bouffée de fumée.


Conclusion

Dans ce tutoriel, je vous ai montré le moyen le plus simple de transformer un objet en fragments plus petits. Maintenant, vous savez comment détruire un objet, en le retirant du jeu; comment échanger l'objet avec des fragments plus petits directement avant sa destruction; et comment faire pour que les fragments s'autodétruisent ensuite.

Ce système peut maintenant être modifié et adapté pour répondre à de nombreux objectifs spécifiques. Vous pourriez avoir une caisse ou un éclat de baril et éclater lorsque vous tirez dessus. Vous pourriez créer une explosion après la frappe d'un avion. Ou vous pourriez avoir un bateau fissure en deux morceaux. Prendre plaisir!