Le robot est confronté à un obstacle sur son parcours, il doit le détecter puis le contourner en utilisant un capteur à ultrasons. Le robot doit contourner l’obstacle par la droite ou par la gauche en fonction de la configuration du parcours.
Fonctionnement du Capteur à Ultrasons
Le capteur à ultrasons fonctionne en émettant des ondes sonores à haute fréquence (ultrasons) et en mesurant le temps que ces ondes mettent à revenir après avoir rebondi sur un obstacle. Voici comment cela fonctionne :
Émission des Ultrasons : Le capteur émet des ondes ultrasonores.
Réflexion : Les ondes rebondissent sur l’obstacle.
Réception : Le capteur reçoit les ondes réfléchies.
Calcul de la Distance : Le capteur mesure le temps écoulé entre l’émission et la réception des ondes. En utilisant la vitesse du son dans l’air, il calcule la distance jusqu’à l’obstacle.
Analyse de la Configuration du Parcours
Avant de lancer le robot, il faut analyser la configuration du parcours pour déterminer la meilleure direction de contournement (droite ou gauche). Cette décision peut être basée sur :
La position de l’obstacle par rapport à la ligne noire.
La présence d’autres obstacles ou de limites sur le parcours.
Mémorise ce choix dans une variable contournement :
Pour que ton robot puisse passer les pentes, il doit déterminer quand il est dans cette situation et programmer pour éviter des anomalies de lecture du capteur RGB :
Détection de l’obstacle ou de la pente :
Quand ton robot commence à monter une pente ou à passer un obstacle, la distance entre le capteur RGB (sous le robot) et le sol devient plus grande.
À ce moment-là, le capteur RGB peut avoir du mal à donner des informations fiables au robot. Il peut même penser que les quatre capteurs voient la ligne, alors que ce n’est pas vrai.
Utilisation des capteurs de mouvement :
Pour détecter cette situation, utilise les capteurs de mouvement du robot, notamment celui qui mesure l’inclinaison et tangage.
Réaction aux changements :
Dès que tu détectes une inclinaison différente et que tous les capteurs semblent voir la ligne en même temps, cela signifie que le robot est en train de monter une pente ou de passer un obstacle.
À ce moment-là, programme ton robot pour qu’il continue tout droit pendant un certain temps. Cela lui permettra de passer l’obstacle ou de monter la pente sans s’arrêter.
Teste l’inclinaison du robot en montée ou en descente :
Ce cas n’est pas possible sur une montée :
si le capteur RGB du robot ne voit plus correctement la ligne :
si le capteur de ligne voit en même la ligne :
En suivant ces étapes, ton robot pourra mieux gérer les obstacles et les pentes !
Lorsque le robot aborde une pente ou un obstacle la ligne noire est bien droite sans angle droit. Les capteurs L2 et R2 ne sont pas sensés capter la ligne noire. Si ces capteurs détectent une ligne noire alors on peut donc considérer qu’ils sont trop éloignés du sol pour tenir compte de leur résultat. Dans ces cas, on fait avancer le robot tout droit autrement on suit la ligne droite :
Documentation Technique : Navigation d’un Robot à l’aide de carrés verts
Comment détecter les carrés verts pour connaître la direction à prendre :
Principe de Fonctionnement
Suivi de Ligne : Le robot suit une ligne noire sur le sol.
Détection des Carrés Verts : Le capteur RGB du robot détecte les carrés verts placés le long de la ligne.
Détection des Croisements : Le robot détecte un croisement lorsqu’il rencontre une ligne noire perpendiculaire à la ligne qu’il suit.
Détection des Carrés Verts
En fonction de la position des carrés verts détectés sur le bord de la ligne noire, le robot prend une décision :
Carré Vert à Droite : Le robot tourne à droite.
Carré Vert à Gauche : Le robot tourne à gauche.
Carrés Verts des Deux Côtés : Le robot fait demi-tour.
Utilise une variable dans laquelle on peut stocker des informations. Dans notre cas, nous allons utiliser une variable pour stocker l’information sur la position des carrés verts détectés.
Par exemple une variable nommée vert :
Carré Vert à Droite : vert à 1.
Carré Vert à Gauche : vert à 2.
Carrés Verts des Deux Côtés : vert à 3.
Amélioration du Fonctionnement
Lors des premiers tests, il a été constaté que le robot doit ralentir dès qu’il détecte des carrés verts. Cela lui permet de mieux détecter le croisement et de prendre la bonne décision.
Détection des Croisements
Lorsque le robot détecte un croisement, il va utiliser la variable vert pour prendre une décision.
En fonction de la valeur de la variable vert, le robot va prendre une décision :
Si vert est 1 : Le robot tourne à droite.
Si vert est 2 : Le robot tourne à gauche.
Si vert est 3 : Le robot fait demi-tour.
Après avoir pris la décision et effectué le virage, il est important de réinitialiser la variable vert à 0 pour qu’elle soit prête pour la prochaine détection de carrés verts.
Avance le robot pour s’assurer qu’il ne soit plus sur les carrés verts.
Puis introduit la détection et la prise de décision des carrés verts dans le suivi de ligne :
Paramétrage de la détection des carrés verts
Sur le joystick, tu peux choisir de faire la balance des blancs pour une meilleur détection des couleurs en fonction de ton environnement (pense à poser ton robot sur une zone blanche avant de déclencher la balance des blancs) :
Choisi une couleur pour le capteur RGB avant de lancer le suivi de ligne :
Dans la barre de navigation verticale, sélectionne « Modèles » . Tous les modèles s’affichent.
Sélectionnez le modèle « Baseplate » . Roblox Studio ouvre une nouvelle expérience :
Apprend maintenant à utiliser l’éditeur de terrain pour créer un environnement insulaire autour du lieu d’apparition, départ de ton futur jeu de plateformes.
Crée une île avec l’éditeur de création de terrain
Dans la barre de menu, accède à l’ onglet Accueil , puis clique sur le bouton Éditeur de terrain . La fenêtre Éditeur de terrain s’affiche :
Dans la fenêtre Éditeur de terrain , clique sur l’ onglet Editer, puis sur le bouton Dessiner :
Dans les sections Paramètres de la brosse et Paramètres du matériel , choisis les options suivantes :
Règle la taille de la brosse :
Puis choisi comme matériel l’herbe :
Puis dessine ton ile :
Sélectionne dans la fenêtre Explorateur sous Workspace : SpawLocation puis modifie sa position : y = 13
Si tu joues, tu parcours ton île dans l’herbe.
Mais ton île n’en n’est pas vraiment une, il manque l’eau autour.
Crée un océan autour de ton île, choisis dans l’éditeur de terrain l’outil Remplir puis modifie les Paramètres de sélection puis les Paramètres du matériel taille X : 4000 Y: 8 Z : 4000, position X : 0, Y : 4, Z : 0 :
Sélectionne Air dans le Matériel source :
Puis choisis dans le Matériel cible l‘Eau puis Remplacer :
Maintenant tu obtiens une vraie île, tu peux supprimer la Baseplate dans la fenêtre Explorateur:
Maintenant tu parcourir ton monde et prendre un bain :
Avant d’insérer des éléments d’espace réservé dans l’espace 3D, il est important de créer une structure d’organisation pour tes ressources dans le Workspace . Ce processus garantit que ton espace de travail reste organisé et facile à analyser.
Il existe deux types de conteneurs que tu peux utiliser pour regrouper des ressources : les objets Folder et Modèle . Les dossiers sont utiles pour stocker de nombreux objets de différents types, et les modèles sont utiles pour stocker des groupements géométriques de pièces similaires. Les instructions suivantes t’apprenne à utiliser les deux objets conteneurs pour stocker toutes les ressources de ton monde 3D.
Pour créer une structure organisationnelle :
Dans la fenêtre de l’Explorateur , passe la souris sur Workspace et cliquez sur l’ icône ⊕ . Un menu contextuel s’affiche.
Dans le menu contextuel, insérez un objet Folder :
Renomme le nouveau dossier « World » .
Clique avec le bouton droit sur l’objet dossier. Un menu contextuel s’affiche.
Dans le menu contextuel, clique sur Renommer et entrez World comme nom du dossier :
Puis crée une structure Model pour toutes tes plateformes :
Puis renomme ton Model en plateformes :
Maintenant que tu disposes d’une structure pour contenir tes plateformes, tu vas insèrer des éléments 3D pour représenter tes plateformes :
Pour insérer une pièce cylindrique pour ta première plateforme :
Dans la barre de menu, sélectionnez l’onglet Accueil .
Dans la section Elément Insérer , clique sur la flèche déroulante, puis sélectionnez Cylindre . Une pièce cylindrique s’affiche dans la fenêtre d’affichage :
Puis glisse le nouvel objet sous le Folder World :
Puis renomme l’objet cylindre :
Saisie la taille et la position de ta première plateforme :
Dans la fenêtre de l’Explorateur , sélectionnez le modèle Plateformes.
Dans l’ onglet Accueil , accédez à la section Modifier et cliquez sur l’icône Ancre . Cela garantit que le système physique ne déplace pas les plateformes lorsque l’on joue.
Tu peux vérifier :
Lance ton jeu et saute sur ta première plateforme :
Par un clique droit demande à dupliquer ta première plateforme, recommence l’opération pour obtenir trois plateformes :
Puis modifie la taille et la position des deux nouvelles plateformes :
Crée des pièces pour gagner de la force afin de pouvoir sauter
Avant de créer ton système de gain, tu dois créer un espace Model pour les pièces à gagner.
Dans la fenêtre de l’Explorateur , ajoute un nouveau Model dans le dossier World , puis renomme-le Coins .
Pour créer les pièces :
Insérez l’objet cylindre dans le dossier Coin , puis renommez en Coin :
Sélectionnez Coin, puis dans la fenêtre Propriétés ,
Définissez BrickColor sur Or .
Réglez le matériau sur Metal .
Définissez la taille sur 0,1, 4, 2 .
Désactivez CanCollide . Cela indique que le joueur peut traverser les pièces pour les récupérer.
Puis viens mettre ancre sur le model des pièces :
Duplique la pièce :
Puis déplace les pièces dans l’espace devant la première plateforme:
Tu peux essayer d’attraper les pièces :
Tu peux constater que tu ne peux pas attraper les pièces.
Pour que les pièces soient récupérables, tu dois programmer l’action lorsque le joueur les touche. Le moteur Roblox peut t’avertir lorsque quelque chose touche une pièce, mais tu dois le programmer dans un script.
Pour que les pièces soient récupérables, le moteur Roblox avertit lorsque quelque chose touche une pièce, mais tu avs le programmer dans un script. Pour créer un script :
Dans la fenêtre de l’Explorateur , sélectionne avec la souris ServerScriptService et clique sur le bouton ⊕ . Un menu contextuel s’affiche :
Renomme le script :
Un nouvel onglet est ouvert, remplace le code par défaut par le code suivant :
Désormais, chaque fois qu’un joueur touche une pièce, le journal de sortie affiche « Pièce collectée par le joueur ».
Pour afficher le journal de sortie :
Attraper les pièces
Essaye maintenant d’attraper des pièces :
Tu constates le résultat dans la console de sortie.
Maintenant, chaque fois que le joueur touche une pièce, la pièce disparaît :
Stockage de la collecte des pièces
Pour gérer le stockage et la gestion des données de collection de pièces de chaque joueur, tu dois créer un objet ModuleScript contenant une structure de données et des fonctions qui accèdent aux données de collection de pièces de chaque joueur. Les scripts de module sont du code réutilisable dont d’autres scripts peuvent avoir besoin. Dans ce cas, CoinService a besoin de ce script de module pour pouvoir mettre à jour les données de collection de pièces lorsque les joueurs touchent des pièces.
Pour créer un script de module :
Dans la fenêtre de l’Explorateur , passez la souris sur ServerStorage et cliquez sur le bouton ⊕ . Un menu contextuel s’affiche.
Dans le menu contextuel, sélectionnez ModuleScript . Un nouveau script de module s’affiche sous ServerStorage. Renomme le en PlayerData :
Remplacez le code par défaut par le code suivant :
Une fois le script PlayerData terminé, appelle ce dernier dans le script CoinService pour mettre à jour le nombre de pièces récoltées :
Dans la fenêtre de l’Explorateur , ouvrez le script CoinService .
Modifie le code existant par le code suivant :
Les modifications apportées au script CoinService d’origine incluent :
Importation des modules PlayerData avec la fonction require() .
Déclarer COIN_AMOUNT_TO_ADD comme le nombre de pièces à ajouter lorsqu’un joueur collecte une pièce, et COIN_KEY_NAME comme le nom de clé défini dans PlayerData .
Création de la fonction updatePlayerCoins() pour mettre à jour le nombre de pièces récoltées par le joueur.
Remplacement de l’ instruction print() dans onCoinTouched() par un appel à updatePlayerCoins() .
La table playerData contient des commentaires qui décrivent la structure de la table, ce qui facilite la compréhension du code. Dans ce cas, une table playerData contient un userId et un champ correspondant nommé Coins qui représente le montant des pièces collectées pour ce joueur.
Lance le jeu pour vérifier le comptage des pièces récoltées :
Affichage de la collecte des pièces
Maintenant, tu peux représenter visuellement les données de collecte de pièces avec un classement à l’écran. Roblox comprend un système intégré qui génère automatiquement un classement à l’aide d’une interface utilisateur par défaut.
Pour créer le classement :
Dans la fenêtre de l’Explorateur , crée un ModuleScript dans ServerStorage puis renommez le script du module en Leaderboard .
Remplacez le code par défaut par le code suivant :
Une fois le script PlayerData terminé, appelle ce dernier dans le script CoinService pour mettre à jour le nombre de pièces récoltées :
Dans la fenêtre de l’Explorateur , ouvrez le script CoinService .
Modifie le code existant par le code suivant :
Lance le jeu pour vérifier l’affichage du score du joueur :
Le joueur part sans force de saut et doit gagner sa force de saut en attrapant les pièces pour pouvoir monter sur les plateformes :
Le joueur perd sa faculté de sauter
Crée un moduleScript pour modifier la force de saut du joueur :
Renomme le module script en PlayerModule puis saisie le code suivant :
Puis modifie le script CoinService :
Puis rajoute en fin du script CoinService :
Joue et essaye de sauter
Redonner la force de sauter au joueur
Ton joueur ne peut plus sauter !! Tu dois lui redonner de la force de saut en attrapant les pièces, modifier le script CoinService :
Duplique des pièces dans ton jeu pour que progressivement le joueur récupère de la force de saut pour atteindre les plateformes :
Faire réapparaître les pièces
Dans le cas d’un jeu multi joueurs, donne la possibilité que les pièces réapparaissent au bout d’un certain temps dans le cas de plusieurs joueurs présents, modifie le script CoinService :
En plus d’utiliser des formes simples pour la création de tes plateformes, tu peux appliquer des opérations de modélisation en mixant les formes simples pour former des formes plus complexes, comme un tunnel dans une plateforme. Cette technique offre un intérêt visuel et de variation dans la façon dont les joueurs interagissent avec ton environnement.
Il existe quatre outils de modélisation des formes simples :
Union – Joint deux ou plusieurs parties ensemble pour former une seule forme.
Intersection – Intersecte les parties qui se chevauchent en une seule forme.
Négation – Annule les parties, ce qui est utile pour faire des trous et des indentations.
Séparer – Sépare l’union ou l’intersection en des formes individuelles.
Pour créer un tunnel creux, tu as besoin que des outils Union et Négative :
Pour réaliser un tunnel, tu as besoin des deux formes simples suivantes :
Puis traverse le cylindre avec la forme bloc, le bloc doit traverser de part en part le cylindre pour créer le tunnel :
Sélectionne le bloc puis demande l’outil Négativer, le boc devient transparent :
Sélectionne les deux formes le cylindre et le bloc, puis clic sur l’outil Union :
Ton tunnel est créé :
Tu peux rajouter cette forme dans ton parcours et la glisse dans l’arborescence Plateformes :