Créer un Bricks Shooter grâce aux colliders et rigidbodies de Unity – Unity 2017 Physics

Créer un Bricks Shooter grâce aux colliders et rigidbodies de Unity – Unity 2017 Physics

Avec les colliders et les rigidbodies de Unity on peut très rapidement mettre en place de la gravité et des impulsions..c’est ce que nous allons utiliser ici pour créer un mini-jeu !!

Notre objectif

Dans ce tutoriel nous allons voir comment créer rapidement ce mini jeu, ce qui va nous permettre en fait de voir des éléments de Unity à propos de la physique en trois dimensions, mais aussi de revoir peut-être certains aspects pour vous comme les rigidbodies, la méthode instantiate ou l’utilisation des colliders

Le petit jeu en soit est très simple, il n’y aura pas de finalisation complète, juste un concept. Vous avez un mur de briques, vous avez une sphère que vous voyez ici sur la droite que nous allons lancer donc par instantiation sur le mur.

brickShooterResultat-intro

Donc grâce au moteur physique de Unity et aux déplacements droite/gauche, on va pouvoir en fait détruire ce mur.

Voyons voir donc comment faire ce petit système.

Avant toute chose et si vous souhaitez avoir la même scène et les mêmes modèles que ceux présentés dans ce tutoriel, rendez vous sur l’asset store et téléchargez le package Robot Lab.

 

Le prefab “brick”

Pour faire un test rapide on va utiliser des  cubes, comme cela vous saurez faire et ensuite il suffit de mettre les props que vous voulez, les modèles 3d que vous voulez, avec les textures que vous voulez…

On va donc créer notre premier prefab donc ça sera une façon aussi de revoir de revoir comment on fait les prefabs.

Le modèle 3D

Vous créez un “3D object“=> cube, ou alors vous partez d’un objet 3d déjà existant. Ici nous allons prendre un objet 3D primitif, un cube que nous renommons “brick”. Ajustez la caméra pour bien visualiser la “brick”, et ajustez la position initiale de la brick.

 

brickShooter-pos-initiale-camera

 

Au final vous devez avoir ce résultat visuel dans votre vue de “game”. Faites bien attention à caler la caméra bien perpendiculaire à notre futur mur.

 

brickShooter-premier-prefab

 

 

Une fois que ce premier élément est posé, on voit sur la vue “inspector” cette brique possède un composant Box Collider de base,  mais ce n’est pas forcément le cas sur vos modèles 3d.

AddComponent=>box collider

 

Le choix du type de collider dépend fortement de votre modèle 3D et/ou de l’effet que vous désirez atteindre. Ainsi si votre modèle est plutôt sphérique, préférez une Sphere Collider.

De plus ici nous sommes en 3D, donc nous ne prenons aucun collider de type “2D”…

 

 

Ajout de la physique

Une fois que le collider est en place on a donc une collision qui est possible, donc on va pouvoir détecter des collisions et donc si on rajoute l’utilisation du moteur physique, en utilisant un composant Rigidbody, on va donc pouvoir interagir dans le monde physique grâce encore une fois au moteur de Unity.

Il faut donc ajouter en plus à notre brick, ce fameux composant. Laissez les paramètres par défaut, et vérifiez bien que “use gravity” est coché, car il nous faut la prise en charge de la gravité afin que les trajectoires des bricks en tombant soient réalistes.

 

Ajout d’ un matérial

Si le blanc sur la brick ne vous plaît pas, libre à vous de créer un matériel avec  la couleur que vous voulez.

Clic droit dans asset => create material

Ici nous allons mettre un petit “violet magique” pour la couleur. Une fois le material crée, assignez le, par drag and drop, à votre brick.

 

change-color-material-unity

 

Votre brick est maintenant prête, il ne reste plus qu’à en faire un prefab, encore une fois par drag and drop (glisser-déposer pour ceux que l’anglais perturbe…), depuis votre vue “hierachy”, vers la fenêtre “assets”, dans le dossier de votre choix. Cela va donc créer automatiquement un prefab !!

 

 

 

Le mur de bricks

Il faut donc maintenant créer justement concrètement ce mur… c’est parti pour sa création.

Créer la première ligne

Comme notre prefab est crée, il suffit de le dupliquer, puis de le déplacer à droite ou à gauche pour compléter notre ligne.

dupliquer sous mac : cmd + d
dupliquer sous windows : ctrl + d

Pour positionner ensuite la nouvelle brick, on peut utiliser un autre raccourci clavier qui permet de se déplacer de 1 unité world en 1 unité world…

Déplacer par pas de 1 :
- maintenir ctrl ou cmd et déplacer le GameObject

 

Cela nous permet de coller les bricks entre elles très proprement et ainsi de créer notre première ligne très rapidement.

brikcShooter-row

 

 

Terminer le mur

En créant un GameObject vide, que l’on renomme “row”, on dispose d’un parent pour les bricks formant notre ligne. Ainsi en rendant enfants toutes nos brick de notre parent “row”, on va pouvoir dupliquer “row” et ainsi construire très rapidement le mur complet !

 

 

Implémentation du projectile

Premiers éléments

Pour le projectile on va pas faire très compliqué …Faites simplement

clic droit =>create=> 3d object => sphere

Vous pouvez changer sa couleur en créant un nouveau material, ici on choisit une couleur rouge.

 

brickShooter-Projectile-Unity

 

Changez son nom, vérifiez que votre sphère possède un composant SphereCollider et ajoutez lui aussi un composant Rigidbody.

Encore une fois ici la physique va nous permettre de laisser le moteur physique gérer automatiquement les trajectoires des projectiles…que du bonheur !

Voilà le projectile est prêt, faites en un prefab.

 

Choisir son point de tir

On décide naturellement de tirer les projectiles depuis la caméra. On va créer un nouveau GameObject empty qui sera enfant de notre caméra, et on le renomme en “shotPos”. Ce sera notre point de tir.

 

brick-shooter-shitPos-unity

 

Vous pouvez ajuster sa position par rapport à la caméra afin d’ajuster l’effet souhaité, quand on verra apparaître le projectile instantié depuis ce point de tir.

Il est temps de passer au script …

 

Scripter le tir de projectiles

Créer un script C#, nommez le en “Shooter” et double cliquez dessus, pour ouvrir visual studio.

La capture ci-dessous indique le script complet que nous allons utiliser, vous pouvez retrouvez le fichier du script complet en téléchargement.

bricks-shooter-script-shot

Le script comporte globalement deux blocs d’instructions :

  • mouvement de la caméra grâce aux input clavier : flèches gauche et droite avec un déplacement selon les axes x et y.
  • instantiation des projectiles ( avec la méthode instantiate de l’API de Unity) et ajout d’une force pour “lancer” ces mêmes projectiles

 

Il est à noter que nous utilisons aussi 4 variables : 

  • 2 variables (de type Rigidbody et Transform) permettent de savoir qui on va déplacer et qui on va instantier
  • 2 autres variables de type float, qui permettent de paramétrer l’effet de tir, ou plus exactement la force de lancer des projectiles, ainsi que la vitesse de déplacement de la caméra.

Ces 4 variables ont une portée “public” nous permettant de les ajuster dans l’éditeur de Unity.

 

Paramètrage du tir dans l’éditeur

De retour dans l’éditeur vous avez donc votre “shotPos” qui a été positionné tout à l’heure, actuellement il n’a aucun script et vous le laissez tel quel.

Par contre la caméra doit porter notre script Shooter.cs, donner lui ce composant donc soit par un simple glisser-déposer, soit par la méthode habituelle, dans la vue “inspector”, par le bouton “addComponent”.

Il faut ensuite paramétrer ce script en indiquant les deux GameObjects : shotPos et le prefab Projectile

shot-script-settings

Enfin ajustez ShotForce et/ou MoveSpeed selon votre envie et l’effet désiré.

Vous pouvez dès lors lancer votre jeu pour un premier test.

 

physics-unity-brick-shooter

 

 

Finalisation

A ce stade le jeu doit être fonctionnel et vous devez pouvoir lancer des projectiles sur votre mur, qui doit s’effriter peu à peu … Mais les projectiles sont peu être trop gros.

Pour régler cela agissez sur le scale du prefab, en mettant par exemple 0,5 sur tous les axes.

Enfin les projectiles lancés restent visibles au fond de votre scène, une fois lancés…nous devons les détruire au fur et à mesure.

Avec Unity il suffit de programmer la destruction avec la méthode Destroy, qui accepte une second paramètre qui est le temps en secondes à attendre, avant de détruire le gameObject.

Ajustez donc le script Shooter.cs, en ajoutant à la suite le code suivant :

Destroy(shot.gameObject,2f); //destruction dans 2 secondes

 

 

Nous arrivons au terme de ce tutoriel qui présente une utilisation rapide du moteur physique de Unity, au travers des composants Collider et Rigidbody.

Retrouvez ce tutoriel en vidéo, afin de vérifier que vous n’avez rien oublié:

Des questions ? Rejoignez le forum .
Besoin d’une aide personnalisée ? Demandez une session personnalisée d’accompagnement .
Admin bar avatar
Spécialisé depuis maintenant 6 ans sur Unity, je développe des jeux vidéos pour moi même, notre équipe, ou pour des clients. Formateur sur Make Your Game. Formateur chez OpenClassRooms sur les parcours Web,Java et Android, mais aussi développeur de sites internet et d'applications, j'exerce en tout point ma passion de l'informatique. Certifié Développeur Unity, C#, PHP, HTML, CSS, MYSQL, JS, JAVA, ANDROID, Wordpress

Laisser une réponse