Comment créer un jeu Android de base avec Unity

Comment créer un jeu Android de base avec Unity

dans ce didacticiel similaire, nous verrons comment créer un élément de base Android jeu utilisant Unity.

Exigences:

  • Unité
  • Un bon éditeur de texte comme NotePad ++ (facultatif mais recommandé)
  • SDK Android
Si vous ne l'avez pas déjà, vous devez commencer par télécharger et installer le SDK Unity ainsi que le SDK Android. Nous avons besoin du SDK Android pour pouvoir tester l'APK du jeu dans un environnement Android.



Lancez Unity et créez un nouveau projet. Faites-en un projet 2D.



Il y a plusieurs panneaux pour se familiariser avec - le panneau Hiérarchie qui contiendra tous nos éléments de scène (scène = quel que soit le «niveau» sur lequel vous travaillez actuellement). Ensuite, il y a l'onglet Jeu qui est utilisé pour jouer / tester votre jeu dans l'éditeur, et sur la droite, vous avez le panneau Inspecteur dans lequel vous modifierez diverses choses comme l'éclairage, la physique, etc.

La première chose que nous voulons faire est de créer un sprite - ce sera notre personnage principal (que nous contrôlons). Vous pouvez soit dessiner votre propre sprite, par exemple dessiner un carré avec des yeux, soit récupérer un sprite sur Internet - assurez-vous simplement qu’il s’agit d’un fichier .PNG (fond transparent).



Faites glisser et déposez votre sprite sur la fenêtre de la scène principale (la plus grande fenêtre) - il apparaîtra également dans le panneau Hiérarchie sur la gauche.

Nous allons maintenant créer quelques plates-formes. Il peut s'agir de simples carrés, car nous pourrons facilement les redimensionner pour créer des murs et d'autres plates-formes.

Créez donc simplement un nouveau 'sprite' carré et faites-le glisser et déposez-le sur la fenêtre Scène comme vous l'avez fait avec votre personnage de sprite.



Maintenant, nous devons demander à Unity de donner de la physique à notre personnage principal - cliquez sur votre personnage principal de sprite (il devrait être surligné en bleu dans la fenêtre Scène), puis sur le panneau Inspecteur, recherchez «GameObjects».

Cliquez sur «Ajouter un composant> Physique 2D> RigidBody2D». Cela ajoutera automatiquement de la physique à votre sprite, que vous auriez autrement dû scripter vous-même dans un autre SDK.

Nous voulons empêcher le personnage principal du sprite de tourner de manière incontrôlable - cherchez donc l'onglet Contraintes dans le panneau Inspecteur (avec le sprite principal toujours en surbrillance dans la fenêtre Scène), et cochez la case 'Figer la rotation Z'.

Si vous appuyez sur le bouton 'Jouer', votre personnage principal de sprite devrait tomber du ciel et tomber à l'infini - nous allons nous en occuper plus tard, mais prenez simplement note de la façon dont nous avons facilement pu appliquer la physique. La physique que nous avons appliquée dépend de la forme à laquelle elle est appliquée - donc si vous appliquiez la même physique à une sphère, par exemple, elle roulerait.

Nous voulons également corriger notre orientation pour empêcher le personnage de tourner et de tourner librement. Trouvez les «contraintes» dans l'inspecteur avec le joueur sélectionné et cochez la case pour figer la rotation Z. Maintenant, cliquez à nouveau sur jouer et vous devriez trouver que votre joueur tombe maintenant du ciel à sa perte infinie.

Afin d'empêcher notre personnage principal de sprite de tomber indéfiniment, nous allons devoir ajouter un collisionneur. Il s’agit essentiellement du contour plein d’une forme que nous ajouterons au personnage principal du sprite. Mettez en surbrillance votre personnage principal de sprite, cliquez sur «Ajouter un composant> Physique 2D> BoxCollider2D.

Maintenant, faites exactement la même chose avec la plate-forme que vous avez créée précédemment. Votre personnage principal sprite devrait maintenant «entrer en collision» avec la plate-forme et y rester.

Nous voulons maintenant nous assurer que la caméra suivra votre personnage principal de sprite - à l'intérieur de la scène, il devrait déjà y avoir un objet caméra. Vous voulez faire glisser ceci au dessus de le personnage principal du sprite.

Ceci est particulièrement important si vous créez un Coureur basé sur 3D , quelque chose comme Pente où vous avez besoin que la caméra reste constamment derrière l'objet principal du jeu (votre personnage principal du sprite).

Allez maintenant dans le panneau Hiérarchie et dans la liste des GameObjects, vous voulez faire glisser la caméra sous le personnage principal du sprite (Player GameObject). Cela fera du personnage principal du sprite le ‘ parent' de la caméra. Ainsi, chaque fois que le Player GameObject se déplace sur l'écran, la caméra doit suivre.

Donc, pour ce didacticiel de jeu, nous allons simplement créer un jeu de base de type coureur sans fin, quelque chose comme Exécuter 3 , où votre personnage principal traversera l'écran et évitera les obstacles (ou «game over» si vous heurtez un obstacle. »Cela va prendre quelques scripts, dont la plupart seront fournis dans ce guide.

Cliquez avec le bouton droit sur le dossier «Assets» et créez un nouveau dossier - nommez-le Les scripts . Maintenant, faites un clic droit sur ce nouveau dossier et appuyez sur 'Créer> Script C #' et nommez-le PlayerControls . Ce script va définir le comportement de notre personnage principal de sprite.

Lorsque vous double-cliquez sur ce nouveau script, il devrait ouvrir dans Visual Studio - alternativement (et ma préférence personnelle), vous pouvez le modifier dans quelque chose comme NotePad ++.

Le fichier de script devrait déjà contenir un peu de code «passe-partout» - en gros, c'est un script qui doit être laissé seul ou juste ajusté à vos besoins, et nous fera gagner beaucoup de temps. Nous allons donc ajouter un nouvel objet.

Au-dessus de la ligne void Start ():

Publique Rigidbody2D rb;

Le prochain morceau de code que nous devons ajouter ira dans le Start (), et est utilisé pour trouver le corps rigide - en gros, nous demandons à Unity de localiser la physique que nous avons attachée aux GameObjects (notre personnage principal de sprite), et Start () va être exécuté lorsqu'un nouvel objet ou script est créé.

Ensuite, localisez l'objet physique.

rb = GetComponent< Rigidbody2D > ();

Et vous ajouterez cette ligne dans la mise à jour ()

rb.velocity = Nouveau Vector2 (3, rb.velocity.y);

Ce que fait Update () est une actualisation constante, de sorte que tout code ajouté sera exécuté en continu (à moins que l'objet ne soit détruit). Nous avons donc indiqué au script que nous voulons que le corps rigide ait un nouveau vecteur utilisant la même vitesse sur l'axe Y (rb.velocity.y), mais avec une vitesse de 3 sur l'axe horizontal. À l'avenir, vous pourrez également utiliser ' FixedUpdate () » qui est similaire mais différent, car vous pouvez contrôler la quantité de mise à jour / actualisation du script.

Enregistrez le script et revenez dans Unity, puis cliquez sur votre personnage principal de sprite pour le mettre en surbrillance. Dans le panneau Inspecteur, allez dans Ajouter un composant> Scripts et ajoutez le script que nous venons d'enregistrer. Désormais, lorsque vous cliquez sur le bouton Lecture, le personnage principal du sprite doit se déplacer continuellement vers le bord de la plate-forme.

Création de contrôles d'entrée du lecteur

Donc, comme il s’agit d’un jeu de style coureur sans fin avec des obstacles, nous devons ajouter des commandes pour le joueur, comme un bouton «sauter».

Rouvrez le script d'avant, et nous allons ajouter ce code supplémentaire:

 si (Input.GetMouseButtonDown (0)) {rb.velocity = Nouveau Vector2 (rb.velocity.x, 5); }

Vous allez mettre cela dans la méthode Update (), et ce que cela fait essentiellement, c'est dire à Unity que lorsque le joueur clique sur le bouton de sa souris (ce qui sera traduit par un clic d'écran sur Android), le personnage principal du sprite «sautera ' dans l'air. En effet, nous avons ajouté une vitesse sur l’axe Y avec une valeur de 5 (une valeur plus élevée signifierait un saut plus élevé, bien sûr).

Si vous n'êtes pas trop familier avec le codage, nous avons utilisé un Si déclaration parce que Si est fondamentalement un type d’instruction «à faire ou à ne pas faire» - il dit littéralement SI cela se produit, exécutez cette commande . Donc, si le joueur ne clique pas sur la souris (ou n'appuie pas sur son écran Android), le script ne fonctionnera évidemment pas.

Allez-y et cliquez sur le bouton «Play» et assurez-vous qu'il fonctionne correctement avant de continuer.

Ensuite, nous allons ajouter nos obstacles (qui peuvent «détruire» le sprite du personnage principal), un score de jeu et un menu «game over».

Si vous avez testé le jeu jusqu'à présent, le seul problème que nous avons jusqu'à présent est que le fait d'appuyer sur le bouton «sauter» que nous avons créé fera sauter le personnage, qu'il soit ancré ou non - il s'agit essentiellement de Flappy Birds, et non d'un coureur comme nous voulons. Mais nous allons résoudre ce problème.

Dans le script, ajoutez ce bit de code au dessus de la méthode Update ():

 Publique Transformer groundCheck; Publique Transformer startPosition; Publique   flotte groundCheckRadius; Publique LayerMask whatIsGround; privé   booléen sur le sol; Et puis ajoutez cette ligne suivante à la méthode de mise à jour au-dessus du si instruction: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Et ensuite, vous allez modifier la ligne suivante pour inclure '&& onGround' si (Input.GetMouseButtonDown (0) && onGround) {Donc, tout notre script devrait ressembler à ceci: Publique   classe   PlayerControls : Mono-comportement { Publique Rigidbody2D rb; Publique Transformer groundCheck; Publique Transformer startPosition; Publique   flotte groundCheckRadius; Publique LayerMask whatIsGround; privé   booléen sur le sol; néant   Début () {rb = GetComponent (); } néant   Mettre à jour () {rb.velocity = Nouveau Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); si (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = Nouveau Vector2 (rb.velocity.x, 5); }}}

Pour expliquer ce que nous avons fait, nous avons créé une nouvelle «transformation», qui signifie une position dans l’espace du monde du jeu. Nous avons défini son rayon et nous demandons à Unity de vérifier si le rayon chevauche notre calque «sol» - et donc si notre rayon est synchronisé avec le «sol», notre personnage devrait pouvoir sauter, et si nous êtes déjà en l'air d'un saut, nous ne devrions pas pouvoir sauter à nouveau. Fondamentalement, sur le sol sera vrai si la transformation nommée groundCheck chevauche la couche de sol. J'espère que cela a du sens.

Alors enregistrez le script et revenez dans Unity, et vous remarquerez que plus d'options ont été ajoutées à l'inspecteur après la mise en surbrillance du lecteur. Ce sont des variables publiques et nous pouvons les ajuster à notre guise.

Maintenant, cliquez avec le bouton droit de la souris sur la hiérarchie et créez un nouvel objet vide, puis faites-le glisser pour qu'il se trouve sous le sprite du personnage principal dans la fenêtre principale de la scène - positionnez cet objet vide là où nous voulons que le sol soit détecté. Renommez l’objet en «Vérifier le sol», puis faites-le glisser sous l’objet de jeu du joueur comme nous l’avions fait précédemment avec la caméra (pour créer une relation parent-enfant entre les objets). Maintenant, l'objet vide suivra le sprite du personnage principal, tout comme la caméra, et il vérifiera en permanence la distance au sol.

Sélectionnez maintenant le sprite du personnage principal et allez dans le panneau Inspecteur - faites glisser l'objet Check Ground dans l'espace appelé «groundCheck». La position «transformée» doit être égale à la position de ce nouvel objet, et là où il est dit «Rayon», faites-en 0,1.

Nous devons définir la couche de base. Sélectionnez simplement le terrain au sol et dans l'inspecteur, recherchez le bouton 'Calque: par défaut' (c'est une liste déroulante) et choisissez 'Ajouter un calque'.

Sélectionnez maintenant «sol» comme couche pour notre plate-forme et répétez cette opération pour toutes les autres plates-formes de la fenêtre de jeu. Là où il est dit «Qu'est-ce que le sol» sur l'objet sprite de notre personnage principal, sélectionnez également le calque du sol.

Ce que nous avons fait, c'est demander au script du joueur d'effectuer une vérification - si le petit point sur l'écran chevauche tout ce qui correspond au calque, le personnage sautera seulement si c'est vrai.

Game Over sur Collision et Menu Jeu

Donc, pour résumer le tout, les dernières choses que nous voulons faire sont A: faire en sorte qu'une collision avec des obstacles entraîne une partie terminée, et B: créer un écran de menu «game over» avec un bouton de lecture.

Ce que vous voulez faire, c'est:

  1. Ajouter un Joueur objet et attribuer un corps rigide et un collisionneur de votre choix.
  2. Ajouter un Ennemi objet et attribuer un corps rigide et un collisionneur de votre choix. (et facultatif, ajoutez Balise 'ennemi' à lui)
  3. Créer un nouveau Script C # et ajoutez-le en tant que composant à Joueur (ou utilisez n'importe quel script attaché au lecteur, pas besoin d'en créer un nouveau si vous en avez déjà un)
  4. Ajoutez ceci dans votre script:
néant OnCollisionEnter ( Collision coll) { Déboguer . Journal ('Collision'); // Vérifie s'il enregistre même une collision, si cela fonctionne, vous pouvez supprimer cette ligne if (coll.gameobject. marque == 'Ennemi') { // voit si l'objet avec lequel votre joueur est entré en collision a une balise appelée 'Enemy