Créez un jeu vidéo 2D avec Unity

Dans cet Instructable, je vais vous montrer comment créer un jeu vidéo 2D vraiment simple. C'est un jeu de style coureur infini, comme "Fly with Me" ou "DoodleJump".

Essayez-le ici !!

J'ai fourni un zip de l'exe du jeu que je vais vous montrer comment faire. Téléchargez-le et essayez-le.

Il est totalement incomplet en ce qui concerne un jeu, mais m'a servi de formidable opportunité d'apprendre un peu de script C # et de consolider les connaissances d'Unity que j'ai acquises depuis le téléchargement il y a deux semaines. Dans le but de partager, j'ai décidé d'utiliser le très aimable Robot Instructables comme personnage principal. J'ai opté pour un look simpliste en hommage à ces caricatures d'autrefois réalisées dans le même style. J'ai toujours aimé quand le crayon interagissait avec le dessin animé.

Je dois dire que Unity est un outil incroyable. Il y a une multitude d'informations disponibles dans la section d'apprentissage du site Unity, je vous recommande fortement d'y jeter un coup d'œil une fois que vous avez vu à quel point il est simple de commencer à créer des jeux 2D.

Tout ce que je vous montre ici, j'ai appris du site Unity, ils ont d'excellents tutoriels et des sessions de formation vidéo.

Je suis nouveau pour Unity, que vous le soyez ou non, c'est juste pour partager mon amour de l'environnement et mon expérience d'apprentissage jusqu'à présent.

Je fournirai les ressources de sprite pour chaque étape afin que vous puissiez suivre et créer le jeu vous-même. Je recommande de ne pas utiliser mon code tel quel, mais plutôt de suivre et d'écrire votre propre version des mêmes scripts.

Je n'ai pas ou peu d'expérience en programmation en C, et pourtant je faisais des scripts en C # assez rapidement .... cela me rappelle énormément d'Arduino et de traitement, que je connais bien.

Donc, même si vous n'avez aucune connaissance de la programmation, je pense que vous pouvez aussi le faire. Suivez au moins mon aventure pour voir comme c'était facile.

Étape 1: Téléchargez le logiciel gratuit Unity

Bascillay Unity a la gentillesse de laisser ceux d'entre nous qui souhaitent se lancer dans le développement de jeux, essayer de l'apprendre gratuitement, tant que nous ne gagnons pas d'argent avec les produits que nous fabriquons en utilisant leur logiciel. Impressionnant. Merci beaucoup Unity, pour les encouragements et la liberté de l'essayer, et pour l'incroyable logiciel.

Si vous prévoyez de suivre, vous devrez vous rendre sur la page d'accueil Unity et télécharger la version gratuite du logiciel.
Vous devrez également créer une connexion Unity, suivez simplement les étapes après l'installation.

Étape 2: ouvrir l'unité

Si c'est la première fois que vous ouvrez Unity, une boîte de dialogue vous sera présentée pour créer un nouveau projet. Accédez à un emplacement approprié et donnez un nom à votre projet, quelque chose comme "Iblejump".
Il est très important de vérifier la sélection 2D au bas du formulaire où il est dit "Configurer les valeurs par défaut pour".

Vous n'aurez pas besoin d'importer les packages du jeu que nous allons créer. Je vous conseillerais de ne pas vous embêter avec eux sauf si vous en avez besoin pour votre jeu. Cela n'a aucun sens d'inclure un volume supplémentaire dans nos fichiers de construction.

Lorsque vous avez effectué les sélections appropriées, allez-y et appuyez sur «créer».

Maintenant, l'éditeur Unity ouvrira notre nouveau projet vide et nous présentera une belle fenêtre de bienvenue. Fermons cela pour l'instant et explorons un peu l'interface.

La zone de travail est divisée en quatre sections différentes, que vous pouvez organiser en fonction de votre flux de travail.

La fenêtre de hiérarchie sur le côté gauche vous montre tous les objets qui sont actuellement dans votre scène. La fenêtre de scène est l'endroit où nous allons construire et placer nos objets de jeu.

En dessous, nous avons une autre zone de travail où vous pouvez ancrer différents onglets. La plupart des onglets peuvent être ancrés dans une zone qui vous convient. C'est comme ça que ma zone est configurée, vous pourriez faire les choses un peu différemment. La principale chose à savoir est que vous pouvez accéder à toutes ces fenêtres à partir du menu déroulant de la fenêtre et les ajouter ou les soustraire au besoin. vous n'avez pas à vous inquiéter si votre fenêtre ne semble pas identique. Je vais vous montrer chacun des domaines que nous utiliserons plus en détail au fur et à mesure.

Pour l'instant, cliquez simplement sur votre "Caméra principale" afin de voir ce qui se passe à droite dans les fenêtres Inspecteur et Scène.
Remarquez comment vous avez maintenant un aperçu de votre scène vide dans le coin inférieur de la fenêtre de la scène, et tous les composants et valeurs de propriété pour la caméra sont exposés.

Étape 3: Créez votre premier objet de jeu


Vous aurez d'abord besoin du dossier Sprites que j'ai inclus en tant que fichier compressé. Extrayez le dossier dans un endroit où vous pouvez le trouver.

Dans Unity, dans la zone de travail du projet, sous l'onglet projet, avec Actifs sélectionné, faites glisser le dossier décompressé dans la zone grise de droite. Tous les sprites dont vous aurez besoin pour dupliquer mon projet se trouvent dans ce dossier.

Accédez au nouveau dossier Sprites et recherchez un sprite nommé "navbar". Faites-le glisser vers le haut dans la fenêtre Scène. Déposez-le quelque part près du bas de votre scène, comme je l'ai fait dans l'image.

Si vous cliquez sur Caméra principale dans votre fenêtre de hiérarchie après l'avoir placée, vous pouvez déjà voir à quoi elle ressemblera dans votre jeu.

Nous devrons ajouter quelques composants, commençons par un collider de boîte, pour rendre notre boîte solide.

Avec votre nouvel objet sélectionné, dans l'inspecteur, cliquez sur "Ajouter un composant" puis ajoutez un Box Collider 2D, trouvé sous Physics2D

Allez-y et ajoutez un deuxième collisionneur de boîtes 2D à votre objet, celui-ci nous allons utiliser pour empêcher le joueur de tomber accidentellement du côté de la barre de navigation juste au début du jeu.

Parce que je voulais que Robot commence sur l'endroit où il se trouve sur la page Web Instructables, j'ai rétréci un peu le collisionneur principal. Et le deuxième collisionneur est en fait assis dans un espace ouvert, ce qui empêchera notre joueur de s'échapper du côté gauche lorsque le jeu commence.

Configurez vos collisionneurs de boîtes pour correspondre aux tailles de l'image, définissez également la taille x et y du paramètre de transformation sur 1, 5. Regardez les changements se produire dans la fenêtre de la scène.

Pièces jointes

  • Sprites.zip Télécharger

Étape 4: ajouter un lecteur

Maintenant que nous avons une plate-forme sur laquelle notre joueur peut se tenir, nous aurons besoin d'un joueur.

Cliquez sur GameObject dans la barre de menu supérieure, sélectionnez créer vide.

Sélectionnez votre nouvel objet de jeu vide dans la fenêtre Hiérarchie et, dans l'inspecteur, changez son nom en Player.
Ajoutez ensuite un composant de rendu Sprite, situé sous Rendu.

Dans le dossier assets / sprites du projet, recherchez Idle_Sprite, cliquez sur le petit triangle à côté, puis faites glisser l'une des images dans la valeur Sprite du composant de rendu sprite.

Nous aurons besoin de quelques composants supplémentaires pour notre lecteur. Ajoutez d'abord un Rigidbody2D parmi les choix Physics2D.

Si vous appuyez sur le bouton de lecture maintenant, notre joueur tombera à travers la barre de navigation. Continuez à l'essayer.

Nous allons corriger cela en ajoutant quelques collisionneurs. Un peu contre-intuitivement, nous ajouterons un collisionneur circulaire à nos pieds et à notre corps, et un collisionneur de caisses à notre tête.

Maintenant, si nous appuyons sur play, notre petit robot roulera sur son dos comme n'importe quel robot à fond rond. Corrigez cela en cochant la case Angle fixe, puis lorsque vous appuyez sur lecture, votre robot devrait tomber sur la barre de navigation et y reposer correctement.

Il est un peu gros à mon goût, j'ai donc changé sa taille en transformée en 0, 75 x et 0, 75 y.

Puis j'ai tripoté le positionnement de la barre de navigation et du robot jusqu'à ce que je sois heureux.

C'est le bon moment pour enregistrer votre scène, lui donner un nom qui vous fait du bien et l'enregistrer.

Étape 5: ajouter de la vie au robot

Bon, maintenant que nous avons l'objet joueur en place, nous pouvons commencer à lui ajouter une animation et des fonctionnalités.

Avec l'objet Player sélectionné, ajoutez un composant Animator. Ajouter un composant -> Divers -> Animateur.
Décochez "Appliquer le mouvement racine" et cochez la case "Animer la physique".

Ouvrez maintenant votre fenêtre Animator. Vous pouvez le faire via le menu déroulant Fenêtre s'il n'est pas déjà ouvert dans la zone de travail du projet. J'aime ancrer le mien en bas.

Le lecteur étant toujours sélectionné dans la hiérarchie, ouvrez la fenêtre Animation. Il peut également être trouvé dans le menu déroulant de la fenêtre. J'aime ancrer la mienne dans la même zone que ma fenêtre de scène et de jeu.

Dans la fenêtre Animation, cliquez sur les minuscules petits triangles à côté de "sample" pour créer un nouveau clip.

Ci-dessous, ouvrez votre dossier d'actifs / sprites et ouvrez à nouveau le sprite inactif. Sélectionnez la série d'images dans son intégralité et faites-les glisser vers la fenêtre d'animation.

Parce que l'animateur (moi) n'était pas cher sur les images, réinitialisez la taille de l'échantillon à 10.

Regardez maintenant votre Animator, vous devriez automatiquement ajouter deux états, un état quelconque et un nouvel état par défaut, Idle. La couleur orange nous indique qu'il s'agit de l'état d'animation par défaut.

Si vous avez correctement suivi ces étapes, vous devriez avoir un robot animé maintenant lorsque vous appuyez sur play.

Créez une autre animation et appelez-la drive. Utilisez la feuille Sprite Drive. Encore une fois, réduisez la fréquence d'images. Je le mets à 20 pour l'instant. Vous pouvez le modifier plus tard à votre convenance.

Dans la fenêtre Animator, vous verrez qu'un deuxième état a été automatiquement créé. Génial! Ajoutons un paramètre flottant nommé "Speed" à notre animateur avant de créer les transitions.

Maintenant, faites un clic droit sur l'état de veille et sélectionnez "effectuer une transition". Faites ensuite glisser vers l'état du lecteur. Cela devrait faire une petite barre de flèche. sélectionnez le triangle au centre de la barre de transition. Modifiez la condition de transition dans l'inspecteur pour que la vitesse soit supérieure à 0, 01. Créez maintenant une transition du retour au ralenti à la condition que la vitesse soit inférieure à 0, 01.

Ensuite, nous devrons créer un script de contrôleur pour Robot.

Étape 6: Le script du contrôleur de robot

Maintenant que nous avons un joueur avec certains états d'animation, nous avons besoin d'un script pour contrôler le personnage. Nous allons ajouter un simple script C # à notre projet pour contrôler notre lecteur.

Dans la fenêtre Projet, créez un nouveau dossier et appelez-le Scripts. Ouvrez ce dossier et créez un nouveau script C #, appelez-le RobotController.

Double-cliquez sur le script pour lancer MonoDevelop. Cela peut prendre un moment pour s'ouvrir, soyez patient.
Entrez le code suivant pour commencer
 en utilisant UnityEngine; using System.Collections; classe publique RobotController: MonoBehaviour {// Ce sera notre vitesse maximale car nous multiplierons toujours par 1 flotteur public maxSpeed ​​= 2f; // une valeur booléenne pour représenter si nous sommes face à gauche ou non bool faceLeft = true; // une valeur pour représenter notre Animator Animator anim; // Utilisez ceci pour l'initialisation void Start () {// définissez anim sur notre animateur anim = GetComponent (); } // La mise à jour est appelée une fois par image void FixedUpdate () {float move = Input.GetAxis ("Horizontal"); // nous en donne une si nous nous déplaçons via les touches fléchées // déplacer nos joueurs rigidbody rigidbody2D.velocity = nouveau Vector3 (move * maxSpeed, rigidbody2D.velocity.y); // définit notre vitesse anim.SetFloat ("Speed", Mathf.Abs (move)); // si nous nous déplaçons vers la gauche mais pas face au flip gauche, et vice versa si (déplacer 0 && faceLeft) {Flip (); }} // flip si nécessaire void Flip () {revêtementLeft =! revêtementLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 

Enregistrez le script et revenez à la fenêtre Unity. Faites glisser le nouveau script RobotController du travail de projet sur l'objet Player dans la fenêtre Hiérarchie. Appuyez sur le bouton de lecture pour lancer le jeu et vous devriez pouvoir contrôler le robot avec les touches fléchées gauche et droite. Si vous ouvrez la fenêtre Animateur sous le jeu, vous devriez voir l'animation changer d'état du lecteur au ralenti selon que Robot se déplace ou non.

Étape 7: Get Jumping - Script de contrôleur de joueur (suite)

Juste quelques étapes à mettre en œuvre pour faire sauter notre joueur.
Nous aurons besoin d'un état d'animation pour sauter et tomber, et aussi un peu plus de code pour contrôler les choses.

Commençons par ajouter deux autres paramètres à notre Player Animator. Ajoutez un flotteur appelé «vSpeed» et un booléen appelé «Ground». Nous utiliserons vSpeed ​​pour maintenir notre vitesse verticale, et Ground sera en place pour nous aider à détecter quand notre personnage est au sol, permettant un saut plus réaliste. (Sauter dans les airs sans toucher le sol, c'est plus comme voler).

De retour dans la fenêtre de la scène, créez un nouvel objet de jeu vide. Appelez-le vérification au sol et ajoutez-y un collisionneur de cercle 2D.
Faites glisser le nouveau collisionneur dans l'objet Player dans la fenêtre Hiérarchie. Changez le rayon du collisionneur de la vérification au sol à 0, 1 et changez sa position de transformation y en -1. Cela place un petit petit cercle juste sous les pieds des robots. Marquez-le également en tant que joueur et insérez-le dans la couche Player.

Maintenant, mettons à jour notre script pour utiliser nos nouveaux paramètres et mettons le code en place pour faire sauter Robot lorsque la barre d'espace est enfoncée.

Mettez à jour votre script RobotController comme suit.

 en utilisant UnityEngine; using System.Collections; classe publique RobotController: MonoBehaviour {// Ce sera notre vitesse maximale car nous multiplierons toujours par 1 flotteur public maxSpeed ​​= 2f; // une valeur booléenne pour représenter si nous sommes face à gauche ou non bool faceLeft = true; // une valeur pour représenter notre Animator Animator anim; // pour vérifier la masse et avoir une force de saut, nous pouvons changer dans l'éditeur bool grounded = false; public Transformer groundCheck; float groundRadius = 0.2f; public LayerMask whatIsGround; flotteur public jumpForce = 700f; // Utilisez ceci pour l'initialisation void Start () {// définissez anim sur notre animateur anim = GetComponent (); } void FixedUpdate () {// définir notre vSpeed ​​anim.SetFloat ("vSpeed", rigidbody2D.velocity.y); // définit notre bool à la terre à la terre = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); // définir le sol dans notre Animator pour qu'il corresponde à anim.SetBool ("Ground", grounded); float move = Input.GetAxis ("Horizontal"); // nous en donne un si nous nous déplaçons via les touches fléchées // déplace nos joueurs rigidbody rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y); // définit notre vitesse anim.SetFloat ("Speed", Mathf.Abs (move)); // si nous nous déplaçons vers la gauche mais pas face au flip gauche, et vice versa si (déplacer 0 && faceLeft) {Flip (); }} void Update () {// si nous sommes au sol et que la barre d'espace a été enfoncée, changez notre état fondamental et ajoutez une force vers le haut si (grounded && Input.GetKeyDown (KeyCode.Space)) {anim.SetBool (" Ground ", faux); rigidbody2D.AddForce (nouveau Vector2 (0, jumpForce)); }} // flip si nécessaire void Flip () {revêtementLeft =! revêtementLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 
Revenez à nouveau au Robot Controller Script dans l'inspecteur et assurez-vous de définir What Is Ground sur tout sauf player. Sélectionnez tout, puis ouvrez à nouveau la boîte de dialogue et désélectionnez Player. (Merci c0)

Dans l'étape suivante, nous allons créer un arbre de mélange Animator pour gérer les sauts et les chutes.



Étape 8: créer une animation d'arbre de mélange

Faisons un arbre de mélange pour contenir nos différents états de chute / saut. Nous pourrions faire des animations séparées pour les deux, mais c'est plus efficace et nécessite moins de volume pour notre petit jeu. De plus, c'est cool. (Ai-je mentionné que Unity héberge un excellent matériel d'apprentissage?)

Revenez à la fenêtre d'animation de votre lecteur, avec votre objet Player sélectionné, créez 5 nouveaux clips d'animation, nommez-les jump1 -jump5.

Pour chaque clip, faites glisser une image de la feuille de saut, dans l'ordre. c'est-à-dire la première image de la feuille de saut vers jump1, et ainsi de suite.

Ouvrez à nouveau la fenêtre de l'animateur, faites un clic droit, créez ... nouveau à partir d'un arbre fade. Nommez-le JumpFall.
Double-cliquez sur le nouvel état JumpFall, ouvrant l'arborescence de mélange dans l'inspecteur.

Cliquez sur le petit signe plus et sur le champ Ajouter un mouvement, faites-le cinq fois.

Modifiez le seuil de -13 à 10 et modifiez le paramètre de seuil pour vSpeed.

Si vous n'êtes pas satisfait de l'animation, vous pouvez modifier les valeurs en décochant Automatiser le seuil. Pour ce jeu simple, il semble assez bon. (L'animateur est devenu paresseux ... encore)

Maintenant, revenez à la fenêtre Animator, vous verrez l'arbre de mélange ouvert, cliquez sur Couche de base dans le coin supérieur gauche pour revenir à nos états de base.

Vous devez supprimer tous les états de saut générés automatiquement, Jump1 à Jump5 maintenant également. (Merci c0)

Créez une transition de l'état Any vers le nouvel état JumpFall, puis une transition de JumpFall à l'état inactif. Cela signifie que nous pouvons entrer dans l'animation de saut depuis n'importe quel état, c'est-à-dire si nous tombons.

Définissez la transition de N'importe quel état à JumpFall pour que le sol soit faux et la transition de JumpFall au ralenti lorsque la terre est vraie.

Vous avez terminé, relancez le jeu et vous devriez pouvoir faire sauter Robot et l'animer avec la barre d'espace. L'animation est un peu saccadée par manque d'images, vous pouvez jouer avec le champ de mouvement pour le changer un peu si vous le souhaitez.

Étape 9: Destroyers

Dans les étapes à venir, nous créerons des objets qui engendreront plus d'objets et sans nettoyage, notre jeu s'enlisera rapidement. Dans cet esprit, nous nous occuperons du nettoyage en plaçant certains objets hors écran pour détruire les objets lorsqu'ils quittent l'aire de jeu.

Notre jeu sera un défilement latéral, nous allons donc en placer un sous la scène pour attraper les objets qui tombent (comme le joueur) et un hors écran à gauche pour nettoyer tout ce qui a déjà défilé.

Commencez par créer un quad. Cliquez sur GameObject - Créez un autre -> Quad. Changez sa position de transformation en x à -25 et y en 0. Ensuite, réglez l'échelle de transformation de sorte que X soit 1 et y soit 25.

Donnez un nom sympa à l'objet quadruple, comme Destroyer Supprimez le composant Mesh Collider et ajoutez une boîte collisionneur 2D, mais cette fois cochez la case "Is Trigger".

Ajoutez-y également un corps rigide 2D, mais définissez l'échelle de gravité dans la fenêtre Inspecteur sur zéro.

Dans la zone de travail Projet, ouvrez votre dossier Scripts et ajoutez un nouveau script C #, nommez-le Destroyer. Double-cliquez dessus et ouvrez Monodevelop.

Entrez le code suivant dans le nouveau script et enregistrez-le.

 en utilisant UnityEngine; using System.Collections; public class Destroyer: MonoBehaviour {// Utilisez-le pour l'initialisation void Start () {} void OnTriggerEnter2D (Collider2D other) {// si l'objet qui a déclenché l'événement est étiqueté player if (other.tag == "Player") {Debug .Pause (); revenir; } if (other.gameObject.transform.parent) {Destroy (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Faites glisser le script Destroy sur l'objet Destroyer.
Maintenant, faites un clic droit sur l'objet Destroyer dans la fenêtre Hiérarchie et sélectionnez Dupliquer. Modifiez la transformation du nouveau Destroyer pour qu'elle soit à la position x = 0, y = -15 et l'échelle à x = 50 et y = 1.

Si vous lancez votre jeu maintenant et que vous quittez la plateforme (rappelez-vous, il y a une barrière invisible sur la gauche), cela devrait interrompre le jeu et vous ramener à l'éditeur.

Nous corrigerons cela dans une étape ultérieure.

La dernière chose à faire avec nos objets Destroyer est d'en faire des enfants hors de l'objet caméra, car nous voudrons qu'ils suivent ou qu'ils ne feront pas grand chose du tout. Pour ce faire, sélectionnez-les et faites-les glisser dans l'objet Appareil photo principal.

Étape 10: La main

La main qui trace la ligne est assez simple. Faisons-le.

Faites d'abord glisser le sprite de la main dans votre fenêtre de scène, positionnez-le en utilisant votre objet caméra pour voir où il se trouve dans la scène.

Transformez l'échelle ainsi x = 2 et y = 2.

Créez un nouvel objet de jeu vide et nommez-le Penciltip. Utilisez l'éditeur de scène pour le positionner à la pointe du crayon.

Donnez-lui une petite étiquette afin que vous puissiez la retrouver facilement si besoin est. Pour ce faire, cliquez sur la petite icône de cube dans l'inspecteur.

Faites maintenant glisser Penciltip dans l'objet main pour les associer. Enfin, faites glisser l'objet à main dans la caméra principale de la fenêtre Hiérarchie.

Il ne fait encore rien, mais les pièces sont en place. permet de configurer d'autres bits dont nous aurons besoin.

Étape 11: Ligne de crayon

Un préfabriqué est comme un enregistrement d'un objet, vous en faites un objet préfabriqué et pouvez l'utiliser à volonté dans votre scène.
Nous les utiliserons pour une grande partie du reste du jeu, car le niveau est généré par programme.

Commencez par créer un nouveau dossier dans le dossier Assets et appelez-le Prefabs. Créez un nouveau préfabriqué en cliquant avec le bouton droit et en sélectionnant Prefab. Nommez la nouvelle pencilline Prefab.

Trouvez le sprite appelé pencilline dans le dossier des sprites et faites-le glisser dans le nouveau gameObject dans la fenêtre de hiérarchie.

Ajoutez une boîte collisionneur 2D et redimensionnez-la pour l'adapter à l'image de la pencilline.0.03 par 0.05 fonctionne.

Ouvrez votre dossier Prefab, puis faites glisser le GameObject sur le préfabriqué. L'icône changera pour correspondre au nouveau préfabriqué.

Supprimez l'objet de jeu une fois que vous l'avez placé dans votre préfabriqué. Nous n'aurons plus besoin de l'original.

Ajoutez maintenant un nouveau script C # à votre dossier Scripts, appelez-le pencilline. Ouvrez-le et entrez le script suivant.

 en utilisant UnityEngine; using System.Collections; classe publique pencilline: MonoBehaviour {// pour faire référence à notre objet préfabriqué pencilline public GameObject; float lastx = 0f; // Utilisez ceci pour l'initialisation void Start () {} // Update est appelé une fois par trame void Update () {// si nous avons suffisamment avancé, créez une nouvelle pencilline if (transform.position.x> (lastx + 0.02f )) {Instantiate (obj, transform.position, Quaternion.identity); lastx = transform.position.x; lastx = transform.position.x; }}} 
Faites glisser le script sur l'objet penciltip dans Hand. Ensuite, avec penciltip toujours sélectionné, ouvrez votre dossier préfabriqué et faites glisser votre préfabriqué pencilline vers le nouveau paramètre obj sur votre contrôleur de script.

Notre caméra n'a toujours pas de script de contrôle, mais si vous lancez le jeu, vous devriez voir un objet pencilline généré à la pointe du crayon. Vous pouvez le voir parce que l'arrière-plan est bleu et la ligne a été faite pour un fond blanc.

Étape 12: Faites rouler la caméra!

Lançons la caméra.
L'objet Camera est tout fait, nous avons donc vraiment besoin d'un script de contrôleur.

Juste un petit changement avant d'écrire le script. La couleur de fond. Il doit être blanc, la ligne semblera crasseuse sinon, sans parler du post qu'il note si vous décidez de les utiliser.

Sélectionnez simplement la caméra principale dans la fenêtre de hiérarchie et cliquez sur l'échantillon de couleur dans l'inspecteur, un sélecteur de couleur apparaîtra. Choisissez le blanc.

D'accord, nouveau script, j'ai appelé le mien pancam. Créez-en un dans votre dossier de script et ouvrez-le dans Monodevelop, puis entrez ce qui suit.

 en utilisant UnityEngine; using System.Collections; pancam de classe publique: MonoBehaviour {float ydir = 0f; lecteur GameObject public; // Utilisez ceci pour l'initialisation // Update est appelé une fois par image void Update () {// vérifiez que le lecteur existe et continuez. sinon, nous obtenons une erreur lorsque le joueur meurt si (joueur) {// si le joueur a dépassé la position x de -1, puis commençons à faire avancer la caméra avec une position Y aléatoire si (player.transform.position.x> -1) {float randy = 0f; randy = plage aléatoire (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = nouveau Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 
Il ne vous reste plus qu'à appliquer le script à votre caméra principale dans la hiérarchie, puis faites glisser l'objet Player sur le paramètre de script.

Essayez à nouveau le jeu, vous venez de faire un coureur infini !!! Enfin presque. Nous avons encore besoin de quelques choses, mais cela se rapproche maintenant.

Ma main est juste un peu plus haute que je ne le veux, mais je vais juste la pousser un peu dans l'éditeur de scène.

Étape 13: ajouter un score

Ajoutez un nouvel objet GUIText dans le menu GameObject et nommez-le Score.

Modifiez la valeur du texte sur Score et la couleur sur noir dans l'inspecteur.
Ouvrez la fenêtre du jeu, si elle n'est pas disponible, vous pouvez la trouver sous le menu déroulant de la fenêtre en haut.

Ajustez la position de transformation, cela fonctionne bizarrement pour les objets GUI pour une raison quelconque, pensez-y comme un pourcentage de l'écran visible, où 0, 5 est 50% et 0, 0 est le coin inférieur gauche.
X = 0, 3 et y = 0, 97 le place tout près du haut dans le coin gauche.

Maintenant, nous devons ajouter un peu plus de code à notre script de caméra. Mettez à jour le script avec ces modifications.
 en utilisant UnityEngine; using System.Collections; pancam de classe publique: MonoBehaviour {float ydir = 0f; lecteur GameObject public; // pour notre objet GUIText et notre partition public GUIElement gui; float playerScore = 0; // cette fonction met à jour notre objet guitext void OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // il s'agit d'une fonction générique que nous pouvons appeler pour augmenter le score d'un montant public void augmenterScore (int montant) {playerScore + = montant; } // Update est appelé une fois par image void Update () {// vérifiez que le lecteur existe et continuez. sinon, nous obtenons une erreur lorsque le joueur meurt si (joueur) {// si le joueur a dépassé la position x de -1, puis commençons à avancer la caméra avec une position Y aléatoire si (player.transform.position.x> -1) {/ / mettre à jour notre score à chaque tick de l'horloge playerScore + = Time.deltaTime; float randy = 0f; randy = plage aléatoire (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = nouveau Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Enregistrez le script pancam et revenez à l'unité.

Sélectionnez à nouveau la caméra principale et vous verrez qu'un nouveau paramètre est disponible dans le composant Script de l'inspecteur. Faites glisser l'objet Score GuiText sur le paramètre Gui.

Essayez de jouer à nouveau, vous devriez maintenant avoir un score qui augmente.

Étape 14: Bombes loin

Il n'y a pas encore de réel danger pour notre héros. Nous allons arranger ça. Permet de faire tomber des bombes de dessins animés du ciel et de casser la ligne.

Créez un nouvel objet de jeu vide et nommez-le Bomb. Dans le dossier des sprites, recherchez le sprite de la bombe, ouvrez-le et ajoutez le premier cadre à Bomb. Ajustez l'échelle de transformation à X = 0, 5, Y = 0, 5.

Ajoutez un collisionneur de cercle 2D et changez son échelle et sa position pour bien paraître. Nous voulons que les bombes tombent, nous aurons donc également besoin d'un corps rigide 2D, ajoutez également ce composant.

Nous aurons également besoin d'un animateur pour contrôler nos états de bombe, alors ajoutez-le également. Décochez Appliquer Root Motion et cochez la case Animer la physique dans l'inspecteur.

Ouvrez la fenêtre d'animation, assurez-vous que Bomb_0 de bombe est toujours sélectionné. Ajoutez une animation et appelez-la bombe, cela créera un nouvel état par défaut dans notre animateur. Utilisez les 3 premières images de la feuille d'image-objet (glisser-déposer), puis réduisez la fréquence d'images en faisant descendre l'échantillon jusqu'à environ 20.

Créez un autre nouveau clip, appelez celui-ci bombexplode et utilisez les images restantes de la feuille de sprite de bombe. Encore une fois, réduisez le framerate à environ 20.

Dans la fenêtre Animator, créez une transition de bombidle à bombexplode, laissez la condition pour le temps de sortie et changez la valeur à 5.00. Cela signifie que notre bombe restera inactive (fusible allumé) pendant 5 secondes avant de changer d'état pour exploser.

Créez une troisième animation dans la fenêtre Animation, appelez-la bombdead et laissez-la vide. Dans l'animateur, créez une transition de bombexplode à bombdead.

Créez un nouveau script appelé bombe dans votre dossier de script.

 en utilisant UnityEngine; using System.Collections; bombe de classe publique: MonoBehaviour {// un support pour notre Animator Animator anim; // un flotteur public pour le rayon d'explosion flotteur public explodeRadius = 1f; // Utilisez ceci pour l'initialisation void Start () {anim = GetComponent (); } // Update est appelé une fois par image void Update () {// si nous avons fini d'exploser if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// détruire tous les objets dans un rayon à moins qu'ils ne le soient Tagged Player ou main Collider2D [] colliders = Physics2D.OverlapCircleAll (transform.position, explodeRadius); foreach (col Collider2D dans les collisionneurs) {if (col.tag! = "Player" && col.tag! = "hand") {Destroy (col.collider2D.gameObject); }} Destroy (this.gameObject); }}} 
Enfin, faites glisser le script de bombe dans votre objet bomb_0.

Une petite chose que j'ai presque oublié, c'est de marquer la main comme la main. pour ce faire, sélectionnez votre objet main dans la fenêtre de hiérarchie, puis sous balise, sélectionnez ajouter une balise. Créez une nouvelle balise à element0 nommée main, puis avec votre objet main sélectionné, changez la balise en main. Modifiez également la balise d'objet penciltip à la main.

Essayez de lancer le jeu, la bombe devrait tomber, exploser et retirer la barre de navigation. (en fonction bien sûr de l'endroit où vous l'avez positionné)

Étape 15: Frai de bombe

Un peu difficile de jouer au jeu maintenant, ce que nous allons faire est de faire un objet de réapparition pour faire apparaître les bombes, tout comme le penciltip engendre la pencilline.

La première chose dont nous avons besoin est un préfabriqué de notre bombe. Accédez au dossier préfabriqué et créez un nouveau préfabriqué, nommez-le bombe. Faites glisser l'objet Bomb dans le préfabriqué de la bombe. Supprimez l'objet bombe d'origine dans la hiérarchie une fois que vous l'avez en tant que préfabriqué.

Créez un nouvel objet quadruple nommé BombSpawn. Placez-le au-dessus de la caméra, vérifiez dans la vue de la caméra principale ou dans la fenêtre de jeu.

Créez un nouveau script dans votre dossier de script appelé BombSpawner et donnez-lui le code suivant.

 en utilisant UnityEngine; using System.Collections; public class BombSpawner: MonoBehaviour {// un tableau d'objets public pour lequel les objets doivent apparaître public GameObject [] obj; // heures min et max pour un autre spawn public float spawnMin = 3f; flotteur public spawnMax = 2f; void Start () {// start spawn Spawn (); } void Spawn () {// get random random float rand = Random.Range (0, 1000); // si le nombre aléatoire est supérieur à 700 faire une bombe si (rand> 700) {Instantiate (obj [Random.Range (0, obj.GetLength (0))], transform.position, Quaternion.identity); } // invoquer le spawn à un intervalle de temps aléatoire entre min et max Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); }} 
Faites d'abord de l'objet BombSpawn un enfant de la caméra principale en le faisant glisser dans la caméra via la fenêtre de hiérarchie.
Faites maintenant glisser le script sur l'objet BombSpawn dans la fenêtre Hiérarchie. Maintenant que BombSpawn est ouvert dans l'inspecteur, faites glisser le préfabriqué Bomb vers le petit triangle intitulé Obj dans le composant de script.

Nous devons ajouter une instruction if dans notre script Bomb (de la dernière étape) pour retarder la chute des bombes jusqu'à ce que le joueur ait commencé à marcher sur la ligne. Une vérification rapide dans ma scène montre la main assise à 7. quelque chose donc je vais retarder les gouttes jusqu'à ce que les bombes soient passées 12.
Voici le script Bomb modifié.

 bombe de classe publique: MonoBehaviour {// un support pour notre Animator Animator anim; // un flotteur public pour le rayon d'explosion flotteur public explodeRadius = 1f; // Utilisez ceci pour l'initialisation void Start () {anim = GetComponent (); } // Update est appelé une fois par image void Update () {// si cette bombe est générée après que le générateur a atteint une position au-delà de x = 12 si (transform.position.x> 12) {this.gameObject.SetActive (true) ; } // sinon, ne bombardera aucun autre objet {this.gameObject.SetActive (false); } // si nous avons fini d'exploser if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// détruire tous les objets dans un rayon à moins qu'ils ne soient étiquetés Player ou hand Collider2D [] colliders = Physics2D.OverlapCircleAll ( transform.position, explodeRadius); foreach (col Collider2D dans les collisionneurs) {if (col.tag! = "Player" && col.tag! = "hand") {Destroy (col.collider2D.gameObject); }} Destroy (this.gameObject); }}} 
Maintenant, Robot peut sauter sur la ligne et marcher un peu avant que les bombes ne commencent à tomber ... essayez-le. Pas encore très difficile. Dupliquons l'objet BombSpawn !! Ensuite, déplacez-le un peu et nous avons deux générateurs de bombes, jouons.

Étape 16: Plateformes (ou Doodles)

Pour générer les plateformes de doodle, nous commençons par créer quelques prefabs. Créez un nouveau dossier dans le dossier Prefab et appelez-le Doodles.

Créez 10 nouveaux préfabriqués nommés doodle1 bien que doodle10.

Créez un nouvel objet de jeu vide, pas besoin de le nommer.

Ouvrez le dossier des sprites et trouvez la feuille de doodles, ouvrez-la et sélectionnez le premier doodle. Faites-le glisser dans l'objet de jeu vide dans la fenêtre de hiérarchie.

Ajoutez-y un collisionneur de boîtes 2D dans l'inspecteur, puis jouez avec l'échelle et le centre pour le placer bien sur le doodle. Rappelez-vous, c'est sur cela que Robot va atterrir.

Ouvrez votre dossier Prefabs / Doodles contenant les préfabriqués vides, puis faites glisser le nouveau GameObject dans le préfabriqué doodle1.

Maintenant, plutôt que de répéter tout ce processus, revenez simplement au dossier sprite, saisissez le prochain doodle et faites-le glisser dans le composant Sprite Renderer de l'objet de jeu, ajustez le positionnement du collisionneur et placez-le dans le préfabriqué de doodle suivant.

Répétez cette opération pour les préfabriqués de doodle restants. Une fois qu'ils sont tous enregistrés en tant que préfabriqués, vous pouvez supprimer le GameObject que nous avons créé pour les créer.

Dupliquez maintenant un objet BombSpawn sous notre caméra principale et déplacez-le hors de l'écran vers la droite. Donnez-lui un nouveau nom dans l'inspecteur, quelque chose comme DoodleSpawn.

Faites ensuite glisser chacun des nouveaux préfabriqués dans le paramètre Obj de notre composant de script. Faites glisser le premier dans l'élément 0 pour remplacer la bombe, et les autres dans le petit triangle à côté d'Obj pour les ajouter à la liste.

Jouez avec le paramètre min / max dans le composant de script pour changer la fréquence à laquelle ils sont générés. Dupliquez l'objet DoodleSpawn et déplacez-le vers le haut si vous voulez un autre ensemble de niveaux.

Une chose que j'ai remarquée en jouant, c'est que la vitesse maximale des robots était trop basse, je l'ai augmentée ici. Accédez à votre objet Player et ajustez la variable maxSpeed ​​dans le composant Script si vous rencontrez le même problème.

Étape 17: Ramassage de points bonus

Faire les micros est très similaire à faire les griffonnages. Quelques petites différences. Commencez par créer un nouveau dossier dans le dossier Prefabs appelé Bonus, et remplissez-le avec 6 prefabs vides.

Nous aurons besoin d'un script pour gérer l'ajout des points bonus à l'objet GUIText, donc dans le dossier scripts, créez un nouveau script appelé BonusPoints. Voici le script à saisir dans Monodevelop.

 en utilisant UnityEngine; using System.Collections; bonusPoints de classe publique: MonoBehaviour {// créer un conteneur pour l'affichage tête haute pancam hud; void OnTriggerEnter2D (Collider2D col) {if (col.tag == "Player") {hud = GameObject.Find ("Main Camera"). GetComponent (); hud.increaseScore (10); Détruisez (this.gameObject); }}} 

Revenez maintenant à la scène et créez un nouveau GameObject vide. Trouvez des bonus dans le dossier des sprites et faites glisser le premier sprite dans le nouveau GameObject.

Transformez l'échelle en x = 2, y = 2 dans l'inspecteur, puis ajoutez un collisionneur de boîtes 2D. Cette fois, nous voulons cocher la case intitulée Is Trigger.

Faites maintenant glisser le script BonusPoints dans powerups_0. Ouvrez le dossier prefabs / bonus et faites glisser le GameObject dans le prefab.

Comme à l'étape précédente, remplacez simplement le Sprite Renderer Sprite pour chaque préfabriqué et enregistrez-le.

Une fois les six préfabriqués bonus créés, nous pouvons supprimer le GameObject que nous avons utilisé pour les construire.

Pour générer nos bonus, nous allons simplement dupliquer l'objet DoodleSpawn, le renommer BonusSpawn, le déplacer un peu vers le haut et remplacer l'objet qu'il génère.

Étape 18: Game Over

The home stretch!! All we need now is for the player to die rather than a break in the code. That, and we'll need a second scene, to display that the game has ended and offer the chance to play again.

Lets add this scene to the build before we start the new scene. In the File pulldown menu, select Build Settings.
In the dialog box that opens up, click the Add Current button, and verify that the scene has a scene # of zero. Close the dialog box.

Make sure you save your current scene and then select New Scene. Name the scene GameOver and put it in the Assets folder.

Add a GUIText object from the GameObject pulldown menu. In the inspector, change Anchor to upper center and alignment to center. Also change the font size to 20 and the color to black.

Back in the scene, drag the sticky note called notes_score to the scene and position it roughly center, use the Game window to see how it will look. Do the same with the Game Over sprite, just drop it where it looks good.

Create a gameOver script in the script folder, like this one.

 using UnityEngine; using System.Collections; public class GameOver : MonoBehaviour { int score = 0; public GUIElement gui; // Use this for initialization void Start () { //get our score from playerprefs score = PlayerPrefs.GetInt ("Score"); //multiply by 10 as we did on displayed score score = score * 10; } void OnGUI(){ //set our text to our score gui.guiText.text = score.ToString (); //if retry button is pressed load scene 0 the game if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +150, 100, 40), "Retry?")){ Application.LoadLevel(0); } //and quit button if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +200, 100, 40), "Quit")){ Application.Quit(); } } } 

Enregistrez-le et faites-le glisser sur la caméra principale dans notre nouvelle scène.

Presque tous terminés, nous devons ajouter une fonction à notre script de caméra pour transmettre le score, et nous devons modifier notre script destructeur où nous avons le code break pour nous envoyer sur la scène GameOver.

Le nouveau script de la caméra.

 en utilisant UnityEngine; using System.Collections; pancam de classe publique: MonoBehaviour {float ydir = 0f; lecteur GameObject public; // pour notre objet GUIText et notre partition public GUIElement gui; float playerScore = 0; // cette fonction met à jour notre objet guitext void OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // il s'agit d'une fonction générique que nous pouvons appeler pour augmenter le score d'un montant public void augmenterScore (int montant) {playerScore + = montant; } // La caméra sera désactivée lorsque nous chargerons un niveau, définissez le score dans playerprefs void OnDisable () {PlayerPrefs.SetInt ("Score", (int) (playerScore)); } // Update est appelé une fois par image void Update () {// vérifiez que le lecteur existe et continuez. sinon, nous obtenons une erreur lorsque le joueur meurt si (joueur) {// si le joueur a dépassé la position x de -1, puis commençons à avancer la caméra avec une position Y aléatoire si (player.transform.position.x> -1) {/ / mettre à jour notre score à chaque tick de l'horloge playerScore + = Time.deltaTime; float randy = 0f; randy = plage aléatoire (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = nouveau Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Le script Destroyer fixe

 en utilisant UnityEngine; using System.Collections; public class Destroyer: MonoBehaviour {void OnTriggerEnter2D (Collider2D other) {// si l'objet qui a déclenché l'événement est étiqueté player if (other.tag == "Player") {Application.LoadLevel (1); } if (other.gameObject.transform.parent) {Destroy (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Devine quoi? Vous venez de faire un jeu! Je l'ai fait aussi!! woot pour nous!
D'accord, ce n'est donc pas le meilleur jeu du monde, mais ce n'est pas le but. Au moins, ce n'était pas pour moi. J'ai été choqué de voir à quel point tout cela est devenu simple et j'ai dû partager. Allez faire, j'ai hâte de jouer à de nouveaux jeux sympas!

Étape 19: Fichiers, etc.

j'ai inclus cette dernière étape pour faciliter l'accès aux scripts que nous venons d'écrire ensemble.
Voici donc les scripts que nous venons de parcourir.

Merci beaucoup de votre visite, j'espère que vous avez apprécié autant que moi.
Partagez et profitez.

Oh et ...... votez fjordcarver?

Pièces jointes

  • bomb.zip Télécharger
  • BombSpawner.zip Télécharger
  • BonusPoints.zip Télécharger
  • Destroyer.zip Télécharger
  • GameOver.zip Télécharger
  • pancam.zip Télécharger
  • pencilline.zip Télécharger
  • Télécharger RobotController.zip

Articles Connexes