Culture Geek

Je code, tu codes… vous codez ? #4

Je code, tu codes… vous codez ? #4

Amélioration du code de déplacement et tir du personnage

 

Bonjour à toutes et à tous, et bienvenue dans cette nouvelle série d’articles qui traitera – en long, large et autres travers – de la programmation, et puisque nous sommes sur Cleek, nous parlerons bien entendu ici de l’art geek dans toute sa splendeur : le jeu vidéo et les étapes nécessaires pour créer le vôtre de A à Z !

Non, non, ne fuyez pas tout de suite, rassurez-vous, le développement de logiciels n’est en aucun cas, contrairement à certaines idées reçues, une affaire d’intellos reclus et monomaniaques ! En effet, quelques cuillères à soupe de logique, une ou deux onces de patience ainsi que quelques grammes de curiosité sont les seuls ingrédients requis pour développer la base d’un jeu vidéo.

Après cette semaine de repos, reprenons la route du code en compagnie de Cleek et de notre Nyan-Cat : nous aborderons aujourd’hui la notion de projectiles dans Unity ! Mais tout d’abord, apportons quelques correctifs à la fonction de déplacement de notre matou arc-en-ciel, car vous avez sûrement remarqué qu’en vous déplaçant aux extrémités hautes et basses de l’écran, celui-ci sortait littéralement du champ de vision du joueur.

 

Ne pas franchir les limites

 

Pour commencer, ré-ouvrez le projet que nous avions entamé la semaine dernière, et testez-le en cliquant sur le symbole « Play » en haut au centre de l’interface de Unity. Vous pouvez normalement bouger le Nyan-Cat de haut en bas grâce aux flèches haut et bas de votre clavier, mais comme vous l’aviez peut-être constaté lors du dernier tutoriel, le Nyan-Cat, une fois les extrémités de l’écran atteintes, ne s’arrête pas !

Du point de vue purement technique, nous pourrions traduire ce problème par les phrases suivantes :

  • notre objet se déplace verticalement, c’est-à-dire sur l’axe Y
  • aucune limite n’est prise en compte dans ce déplacement

Nous souhaitons donc limiter la valeur du déplacement afin que le joueur puisse toujours visualiser son personnage. Pour cela, une solution simple, la fonction « Mathf.Clamp() » nous permettra d’ajuster une valeur – dans notre cas, la position sur l’axe Y du Nyan-Cat après que le joueur l’ait déplacé – en fonction d’un minimum et d’un maximum.

Cette fonction se présente comme suit :

Valeur = Mathf.Clamp(valeurSansLimite, valeurMinimale, valeurMaximale);

Reprenons le script « MoveNyan », ouvrons-le et regardons dans la fonction « Update() » à quel endroit nous modifions la position sur l’axe Y.

 

cleek_image_prog4_1

 

Nous allons modifier la ligne de code dans le cadre rouge, de manière à ce que la valeur « this.gameObject.transform.position.y + speed * Time.deltaTime * Input.GetAxis (« Vertical ») » ne sorte pas des limites de l’écran. Pour connaître les valeurs limites qui nous intéressent, la méthode la plus simple reste la visuelle : reprenez Unity et sélectionnez votre objet NyanCat. Deux flèches apparaissent alors sur le chat dans la vue « Scene ». Ces flèches vous permettront de déplacer l’objet sur l’axe correspondant, tout en étant capable de vérifier les valeurs numériques des positions associées à l’intérieur de l’Inspector. Déplacez donc le NyanCat tout en haut de l’écran, de manière à ce qu’il en touche le bord sans le dépasser, et notez la valeur Y de l’Inspector, puis répétez la manœuvre en bas de l’écran.

 

cleek_image_prog4_2

 

Dans mon cas, les valeurs obtenues sont 5 pour le haut de l’écran, et -4,93 en bas de l’écran. La fonction Mathf.Clamp() se présentera donc de la manière suivante :

 

cleek_image_prog4_3

 

Quatre éléments sont soulignés en rouge sur l’illustration ci-dessus :

  • le premier est le nom de la fonction, Mathf.Clamp, suivi de l’ouverture des parenthèses
  • le second est la valeur originale de la position sur l’axe Y, telle que vous l’avez découverte lors du précédent tutoriel
  • le troisième est la valeur mini-mâle (enfin… le bas de l’écran)
  • le quatrième est la valeur maxi-mâle (et donc… le haut de l’écran)

Remplacez donc l’ancienne ligne de code par la nouvelle, enregistrez votre script et testez votre jeu : Nyan-Cat se déplace désormais dans les limites de l’écran !

Nous avons donc appris qu’en utilisant des « fonctions » telles que « Mathf.Clamp() », nous pouvons agir sur des valeurs de variables et les modeler selon nos envies, pour répondre à des problématiques particulières. Sachez qu’il existe des milliers de fonctions prévues pour tout un tas de cas de figures divers et variés, et que nous en découvrirons plusieurs ensemble !

 

Une histoire de violence (et de code)

 

Maintenant que notre bestiole reste bien sagement dans les limites de notre écran, la prochaine fonctionnalité que nous allons ajouter sera celle de pouvoir envoyer des projectiles sur ses ennemis (qui n’existent d’ailleurs pas encore, mais chaque chose en son temps).

Récupérez l’image de tir « shoot.png » sur ce lien et glissez là dans Unity à l’intérieur du dossier « sprites ». Une fois cela fait, déposez l’image dans la scène afin de créer un nouvel objet « shoot ».

Dans l’Inspector, ajoutez deux composants à l’objet que nous venons de créer. Cliquez sur « Add component » et dans l’onglet « Physics », sélectionnez « Rigidbody ». Ce composant gère en fait pour nous la physique de l’objet. Décochez l’option « Use gravity » (sinon, ça tombe !).

L’autre composant nous permettra de gérer la collision du tir avec des ennemis. Dans l’onglet « Physics », choisissez cette fois le « Box collider ». Un rectangle vert apparaît sur votre objet dans la vue « Scene » : vous pouvez adapter la forme du rectangle de collision en cliquant sur « Edit collider » dans l’Inspector.

 

cleek_image_prog4_8

 

Nous allons maintenant créer deux scripts : le premier pour faire bouger le tir vers la droite, le second pour que le tir soit supprimé de la mémoire de l’ordinateur quand il sort de l’écran. Créez donc un nouveau script dans le dossier du même nom et nommez-le « MoveShoot » avant de l’ouvrir. Monodevelop se lance, codons un peu !

De la même manière que pour déplacer le personnage, nous aurons besoin d’une variable pour la vitesse de notre tir, ainsi que d’un objet « Vector3 » qui représentera la position après déplacement de ce tir. Récupérez le code suivant et copiez le dans votre nouveau script :

 

cleek_image_prog4_6

 

Enregistrez, associez le script MoveShoot à l’objet shoot dans la hierarchy en le glissant dessus puis testez : le tir se déplace horizontalement, vers la droite, car nous avons augmenté la valeur de sa position sur l’axe X (l’axe horizontal) de la valeur de la variable « speed ».

Notre second script maintenant. Revenez dans Unity et créez un autre script : « FreeObject » qui va détruire un objet lors qu’il sortira de l’écran, afin de ne pas surcharger la mémoire de l’ordinateur avec des informations qui ne lui servent plus. Dans Monodevelop, après la fonction « Update() », ajoutez une autre fonction, « OnBecameInvisible() » comme sur l’image ci-dessous :

 

cleek_image_prog4_7

 

Comme pour le précédent script, enregistrez-le et reliez-le à notre objet shoot.

Nous disposons maintenant d’un objet shoot qui se déplace vers la droite de l’écran et qui se supprime de la mémoire lorsqu’il n’est plus visible. Associons maintenant ce tir au Nyan-Cat afin que le joueur puisse tirer autant de fois qu’il le souhaite.

Pour faire cela, nous allons avoir besoin de réutiliser notre objet shoot tel que nous venons de le concevoir. Nous allons donc en faire un « prefab » qui nous permettra de créer des shoot à volonté. Dans Project > Assets, créez un nouveau dossier « prefabs » et glissez-y l’objet shoot depuis la Hierarchy : votre objet est désormais stocké dans votre projet ! Vous pouvez donc le supprimer de la Hierarchy.

 

cleek_image_prog4_9

 

Retournons dans le dossier scripts et créons le script « NyanFire ». Dans Monodevelop, copiez le code suivant :

 

cleek_image_prog4_10

 

Sauvegardez le script, associez-le (toujours par glisser-déposer) à notre objet Nyan-Cat. Glissez ensuite notre shoot du dossier « prefabs » dans le champ « shoot » de l’Inspector, comme sur l’image suivante :

 

cleek_image_prog4_11

 

Dans le menu de Unity, allez dans Edit > Project settings > Input. Vous aurez alors accès à toutes les commandes par défaut de votre jeu. Vous pouvez donc modifier le champ « Positive button » du bouton « Fire1 » en y inscrivant « space », afin de pouvoir tirer en utilisant la barre d’espace.

 

cleek_image_prog4_10bis

 

 

Vous pouvez maintenant tester votre jeu : Nyan-Cat tire désormais de petits projectiles en plus de se déplacer ! Notre travail d’aujourd’hui nous aura donc permis d’aborder les notions de fonctions, avec Math.Clamp(), mais aussi d’associer des objets à des scripts pour faire des actions de plus en plus complexes dans notre jeu. Ce n’est qu’un début, mais ne paniquez pas : en recopiant consciencieusement les morceaux de codes donnés en exemple et en modifiant les différentes variables selon vos envies, vous allez progresser sans vous en rendre compte !

Au programme de la semaine prochaine, nous commencerons à créer des ennemis, histoire de satisfaire la soif intarissable de violence de notre icône geek !

 

Culture Geek
Plus Culture Geek