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 !!
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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é: