Créer un joueur et ses ennemis
Dans le chapitre précédent, nous avons ajouté un fond et quelques accessoires sur notre scène. Il est temps d'ajouter quelques éléments de jeu utiles, comme le joueur!
Création d'un joueur entité contrôlable a besoin de quelques éléments. un sprite, un moyen de contrôler et une façon de le laisser interagir avec le monde.
Nous allons explorer cette étape de processus par étape.
Commençons par l'image-objet.
Ajouter un sprite
Voici l'image que nous utiliserons:

(Clic droit pour enregistrer l'image)
Copiez l'image du lecteur dans le dossier « Textures ».
Créer un nouveau Sprite. Nommez-le « joueur ».
Sélectionnez l'image-objet à afficher dans la propriété « Sprite » du composant « Sprite Renderer ».
Si vous avez des problèmes, reportez-vous à la partie précédente. Nous avons fait exactement la même procédure pour l'arrière-plan et des accessoires.
Sélectionnez la couche de sprite « Player ».
Placez le lecteur dans l'objet « de premier plan ».
Changer son échelle. (0,2, 0,2, 1) doit être fine.
Un mot sur les composants
Par défaut, un objet de jeu vide ressemble à:

Cet objet a un seul composant: une « Transform ». Ce composant est nécessaire et ne peut pas être désactivé ou supprimé d'un objet.
Vous pouvez ajouter autant de composants que vous voulez sur un objet. Un script est ajouté en tant que composant, par exemple. La plupart des composants peuvent être activés ou désactivés pendant la durée de vie de l'objet.

(Vous pouvez cliquer sur la case à cocher pour désactivé. Vous pouvez faire un clic droit sur un composant pour le réinitialiser, supprimer, etc.)
Remarque. composants peuvent interagir avec d'autres composants. Si un objet est un composant qui nécessite un autre composant d'un objet à travailler, vous pouvez simplement faire glisser l'objet entier dans ce composant et il trouvera la bonne dans l'objet.
Un « Sprite Renderer » est un composant qui est capable d'afficher une texture d'image-objet.
Maintenant que nous avons appris sur le concept de composant, ajoutons un au joueur!
Ajouter un collisionneur Box
Cliquez sur le bouton « Ajouter un composant » de l'objet joueur. Choisissez un « 2D Box Collider ».
Cela représentera le joueur hitbox.
Vous pouvez voir le collisionneur dans l'éditeur « Scene » vue et modifier sa taille dans le « inspecteur » avec la propriété « Taille ».
Pointe. Il y a une autre façon de modifier un collisionneur de boîte. Sélectionnez un objet de jeu avec un collisionneur de boîte et activez le commutateur « Modifier Collider » dans le composant. Vous pouvez observer que le collisionneur de boîte (le rectangle vert) montre maintenant quatre petites poignées sur. Faites glisser l'un d'entre eux pour changer la forme de la boîte.
Attention, le rectangle bleu représente le composant de transformation de votre objet de jeu, pas le collisionneur.
Nous allons définir la taille du collisionneur à (10, 10).
Il est trop grand pour un vrai shmup mais il est encore plus petit que l'image-objet:

Pour le moment, il sera suffisant.
Pointe. si vous prévoyez de faire un shmup. passer beaucoup de temps à peaufiner vos hitboxes. En général, il doit adapter parfaitement un petit élément à l'intérieur du sprite joueur. Qu'en est-il de la fenêtre du navire ici? Vous pouvez également changer la forme de collisionneur - avec un « Collider Cercle 2D », par exemple. Cela ne change rien au comportement grâce à l'unité, mais il permettra d'améliorer légèrement le gameplay.
Enregistrez l'objet de jeu de joueur à un bâtiment préfabriqué. Vous avez maintenant une entité de joueur de base!

Polygone 2D Collider
Si vous voulez un hitbox super précis et en forme sur mesure, l'unité offre une composante « Polygon collisionneur 2D ». Il est moins efficace, mais vous permet de définir la forme exactement comme vous voulez.
La magie modèle du solide indéformable
Il y a un dernier élément à ajouter sur notre lecteur: un « 2D modèle du solide indéformable ».
Cela indiquera au moteur physique comment gérer l'objet de jeu. En outre, il permettra également à des événements de collision à soulever dans les scripts.
- Sélectionnez votre objet de jeu du joueur dans la « hiérarchie ».
- Ajouter un composant « 2D modèle du solide indéformable ».
Maintenant, appuyez sur jouer et observer:
Le navire est en baisse!
Dites bonjour à notre bien-aimée gravité. )
Alors que de nouvelles scènes viennent avec une gravité par défaut et rigidbodies ajouter une masse à un objet, le navire est maintenant attiré vers le bas.
La gravité par défaut de l'unité est 9,81. à-dire la gravité terrestre.
La gravité peut être utilisé dans une sorte de jeux, mais nous ne voulons pas avoir à gérer ici. Heureusement, il est simple de désactiver la gravité sur un modèle du solide indéformable. Il suffit de définir « Gravity Scale » à 0. Ca y est, le navire bat à nouveau.
Les réglages complets:

Déplacement du lecteur
Le temps pour certains scripts! Jusqu'à présent, nous ne pas le code quoi que ce soit. C'est la puissance de (amour) l'unité.
A l'intérieur Unity, créez un nouveau script C # dans votre dossier « Scripts ». Appelez-le « PlayerScript ».
Ouvrez votre éditeur de texte favori ou utilisez le sous-menu « Sync » (Cliquez sur « actifs » dans la barre de menus, puis sur « Project Sync MonoDevelop ») pour modifier le script.
« Projet Sync MonoDevelop ». ce sous-menu est un peu bizarre. Tout d'abord, le nom ne change pas, même si vous avez mis en place un autre éditeur.
Si vous ouvrez simplement le script à la place, le compilateur de votre IDE attrapera probablement des erreurs car il ne saura pas l'unité.
Il n'a pas d'importance parce que vous ne serez jamais compiler directement avec elle, mais il est agréable d'avoir la saisie semi-automatique sur les objets Unity et une première passe sur les erreurs.
Si vous venez de XNA, vous ne serez pas perdu.
Vous pouvez définir des méthodes (appelées « message » que nous ne sommes pas en C # système d'héritage) que l'unité reconnaîtra et exécuter en cas de besoin.
scripts par défaut sont les méthodes de début et de mise à jour. Voici une courte liste des plus utilisés fonctions « Message »:
- Awake () est appelée une fois lorsque l'objet est créé. Voir comme le remplacement d'une méthode constructeur classique.
- Démarrer () est exécutée après Awake (). La différence est que la méthode Start () n'est pas appelé si le script est pas activé (rappelez-vous la case à cocher sur un composant dans l ' « inspecteur »).
- Mise à jour () est exécutée pour chaque trame dans la boucle principale du jeu.
- FixedUpdate () est appelée à chaque image fixe framerate. Vous devez utiliser cette méthode sur Update () lorsqu'il s'agit de la physique ( « modèle du solide indéformable » et forces).
- Destroy () est invoquée lorsque l'objet est détruit. C'est votre dernière chance de nettoyer ou d'exécuter du code.
Vous avez également des fonctions pour les collisions:
Fiou ... Cette explication était un peu ennuyeux, mais inévitable. Désolé .
Remarque sur le suffixe 2D. vous devriez avoir observé maintenant que presque tout ce que nous avons parlé a été suivie par « 2D ». Une des méthodes « Collider Box 2D », un « 2D modèle du solide indéformable », le « OnCollisionEnter2D » ou « OnTriggerEnter2D », etc. Ces nouveaux composants ou méthodes sont apparues avec l'unité 4.3.
En les utilisant, vous adoptez le nouveau moteur physique intégré dans l'unité 4.3 pour les jeux 2D (basé sur Box2D) au lieu de celui pour les jeux 3D (PhysX). Les deux moteurs partagent des concepts et des objets similaires, mais ils ne fonctionnent pas exactement la même chose. Si vous commencez à travailler avec un (pour favoriser Box2D jeux 2D), de s'y tenir. Voilà pourquoi nous utilisons tous les objets ou les méthodes avec un suffixe « 2D ».
Nous reviendrons sur certains d'entre eux dans les détails quand nous allons les utiliser.
Pour notre script joueur, nous ajouterons quelques contrôles simples: les touches fléchées se déplacer le navire.
Remarque sur les conventions C #. regardez la visibilité des membres de la vitesse: il est public. En C #, une variable membre devrait être privé afin de maintenir la représentation interne de la classe privée.
Mais l'exposition comme une variable publique vous permet de modifier dans l'unité à travers le volet « inspecteur », même pendant l'exécution du jeu. Ceci est une fonctionnalité puissante de l'unité, qui vous permet de Tweaks le gameplay sans codage.
Rappelez-vous que nous faisons ici les scripts, pas la programmation classique C #. Cela implique de briser certaines règles et conventions.
explications
- Nous définissons d'abord une variable publique qui apparaîtra dans la vue « inspecteur » de l'unité. Ceci est la vitesse appliquée au navire.
- Les champs nous avons besoin.
- Nous utilisons l'axe par défaut qui peut être redéfinie dans « Edition » -> « Paramètres du projet » -> « Entrée ». Ceci renvoie une valeur entre [-1, 1]. 0 étant l'état de repos, une droite, la gauche -1.
- On multiplie la direction de la vitesse.
- Nous devons accéder au composant modèle du solide indéformable, mais nous pouvons éviter de le faire chaque image en stockant une référence.
- Nous changeons la vitesse modèle du solide indéformable. Cela indiquera le moteur de physic pour déplacer l'objet de jeu. Nous le faisons dans FixedUpdate () comme il est recommandé de faire tout ce qui est lié à la physique là-dedans.
Maintenant, attachez le script à l'objet de jeu.
Pointe. vous pouvez attacher un script à un objet de jeu en faisant glisser le script de la vue « Projet » sur l'objet du jeu dans la « hiérarchie ». Vous pouvez également cliquer sur « Ajouter un composant » et trouver manuellement.
Appuyez sur le bouton « Play » en haut de l'éditeur. Le navire est en mouvement et votre jeu est en cours d'exécution! Félicitations, vous venez de faire l'équivalent d'un « Bonjour, monde! » Pour un jeu :)
Essayez de modifier la vitesse: cliquez sur le lecteur, modifiez les valeurs de vitesse dans le « inspecteur » et examiner les conséquences.
Faites attention. modifications lorsque le jeu est exécuté (ou) sont perdus joué lorsque vous l'arrêtez! Il est un excellent outil pour peaufiner le gameplay, mais rappelez-vous ce que vous faites si vous voulez conserver les modifications.
Cependant, cet effet est également très pratique: vous pouvez détruire votre jeu complètement lors de l'exécution pour tester quelque chose de nouveau, sans avoir peur de briser votre projet réel.
Ce fut le premier signe de vie dans notre jeu! Ajoutons plus!
Un shmup est rien sans des tonnes d'ennemis pour faire sauter.

(Clic droit pour enregistrer l'image)
Il est temps de créer un nouveau sprite! Encore:
- Copier l'image dans le dossier « sprites ».
- Créer un nouveau Sprite en utilisant cette image.
- Définissez la couche de sprite à « ennemis »
- Modifier la propriété « Scale » de la transformée de (0,3, 0,3, 1).
- Ajouter un « 2D Box Collider » avec une taille de (4, 4).
- Ajouter un « 2D modèle du solide indéformable » avec une « Gravity Scale » de 0 et « Angles fixes » tic tac.
Enregistrez le ... et ce bâtiment préfabriqué est tout!

Nous scripter un comportement simple: le Poulpi va simplement se déplacer dans une direction.
Créer un nouveau script « MoveScript ».
On pourrait l'appeler « EnemyScript » mais nous prévoyons de le réutiliser plus tard dans un autre contexte.
Remarque. la modularité fournie par le système à base de composants de l'unité offre une excellente façon de séparer les scripts avec des caractéristiques différentes. Bien sûr, vous pouvez toujours avoir un scénario géant tout faire avec beaucoup de paramètres. C'est votre choix, mais nous vous recommandons fortement contre faire.
Nous allons copier certaines parties de ce que nous avons déjà écrit dans le « PlayerScript » pour le mouvement. Nous ajouterons un autre concepteur (un membre du public, vous pouvez modifier dans le « inspecteur ») variable pour la direction:
Fixez le script à la Poulpi. Hit « Play »: il doit se déplacer comme ci-dessous.
Si vous déplacez le joueur en face de l'ennemi, les deux sprites vont entrer en collision. Ils vont simplement bloquer les uns les autres que nous ne définissons le comportement de collision encore.
Vous avez appris à ajouter une entité joueur, contrôlé par le clavier. Ensuite, nous avons créé un ennemi de base avec une IA rudimentaire.
Maintenant, nous voulons détruire cette chose en mouvement! Et pour cela, nous avons besoin de munitions!