Dans ce didacticiel, vous allez apprendre à créer un jeu en 2D avec C # et Unity. Nous allons tirer parti du support de microphone d'Unity pour améliorer le gameplay du jeu. L'objectif du jeu est simple: atteindre l'autre côté du niveau en évitant les obstacles tout au long du parcours. Le joueur peut déplacer le personnage principal en soufflant sur le microphone de l'appareil, en le déplaçant vers le haut..
Vous apprendrez les aspects suivants du développement de jeux Unity dans ce tutoriel:
Ouvrez Unity et sélectionnez Nouveau projet du Fichier menu pour ouvrir la boîte de dialogue nouveau projet. Indiquez à Unity où vous souhaitez enregistrer le projet et configurez leConfigurer les valeurs par défaut pour: menu à 2D.
Dans l'étape suivante, l'interface utilisateur de Unity vous est présentée. Configurez le projet pour votre plate-forme préférée en choisissant Paramètres de construction du Fichier menu et sélection de la plate-forme cible.
Avant de commencer, assurez-vous que le 2D bouton dans le Scène panneau est en surbrillance. Vous pouvez également modifier la résolution actuelle dans Jeu panneau.
Vous devriez également voir les panneaux d’espace de travail de Unity, que nous utiliserons dans ce tutoriel. Prenez un moment pour explorer l’interface utilisateur de Unity, telle que la Scène, Jeu, Hiérarchie, Projet, Les atouts, et Inspecteur. Nous les utiliserons beaucoup dans ce tutoriel.
L'interface utilisateur de notre jeu va être simple. La capture d'écran suivante vous donne une idée des ressources que nous allons utiliser et de la structure finale de l'interface utilisateur du jeu. Vous pouvez trouver les ressources que nous allons utiliser dans les fichiers sources sur GitHub..
Vous pouvez utiliser l'un des trois langages de programmation lorsque vous utilisez Unity., C #, UnityScript, une variante de JavaScript, et Huer. Chacun de ces langages de programmation a ses avantages et ses inconvénients et il vous appartient de choisir celui que vous préférez. Ma préférence personnelle va au langage de programmation C # et c'est le langage que je vais utiliser dans ce tutoriel..
Si vous décidez d'utiliser un autre langage de programmation, veillez à consulter le document Script Reference de Unity pour obtenir des exemples..
Avant de commencer à coder, nous devons ajouter les actifs au projet Unity. Vous pouvez le faire de plusieurs manières:
Une fois cette étape terminée, vous devriez voir les actifs dans le projet. Les atouts dossier dans le Projet panneau.
Nous allons utiliser un certain nombre de sons pour créer une excellente expérience auditive. Les effets sonores utilisés dans ce tutoriel ont été obtenus à partir de freesound.org.
Commencez par faire glisser l’arrière-plan dans la Hiérarchie panneau. Il devrait apparaître automatiquement dans le Scène panneau.
Parce que le Scène panneau est configuré pour afficher une vue 2D, vous remarquerez que la sélection de la Caméra principale dans le Hiérarchie montre un aperçu de ce que la caméra va afficher. Vous pouvez aussi voir cela dans le Jeu vue. Pour rendre toute la scène visible, définissez le paramètre Taille valeur de la Caméra principale à 4 dans le Inspecteur panneau comme indiqué ci-dessous.
Nous utiliserons une feuille de sprite pour les éléments de l'interface utilisateur de notre jeu. Unity possède un éditeur de sprites qui facilite grandement l’utilisation des sprites. L'illustration utilisée dans ce tutoriel a été obtenue auprès de openclipart.org..
Importez l’œuvre, sélectionnez-la dans la liste Les atouts panneau, et changer le Mode Sprite option de Plusieurs dans le Inspecteur panneau.
Cliquez sur le bouton intitulé Éditeur de sprite et mettre le Type option de Automatique.
La feuille de l’image-objet étant coupée en tranches et prête à l’emploi, cliquez sur la flèche qui apparaît lorsque la feuille de l’image-objet est sélectionnée et choisissez l’image-objet de la vache, le personnage principal de notre jeu. Faites-le glisser sur la scène pour l'ajouter..
Pour détecter des collisions, au moins un des objets en collision doit avoir un Rigidbody 2D composant attaché à elle. Pour en ajouter un à la vache, cliquez sur le bouton Ajouter un composant bouton dans le Inspecteur panneau. Dans la liste des composants, sélectionnez RigidBody 2D dans le Physique 2D section.
Vérifier la Angle fixe boîte pour empêcher la vache de tourner si une collision se produit. Nous n'utiliserons pas la gravité physique par défaut dans ce jeu, mais nous simulerons la nôtre. Changer la Échelle de gravité de 1 à 0 pour s'assurer que la gravité par défaut n'a pas d'impact sur l'objet.
Le sol est utilisé pour empêcher notre personnage principal de tomber une fois que nous avons ajouté la physique au jeu. Créez un nouvel objet de jeu en sélectionnant Créer vide du GameObject menu.
Pour que le sol détecte quand le personnage le touche, nous devons ajouter un Box Collider 2D composant. Un collisionneur est une forme physique qui définit la zone qui déclenche une collision..
Sélectionnez l'objet de jeu d'étage dans le Hiérarchie, ouvrir le Inspecteur panneau, et cliquez Ajouter un composant. Dans la liste des composants, sélectionnez Box Collider 2D dans le Physique 2D section.
Changer la Taille propriété à X: 4,8 et Y: 0,05 pour créer un petit rectangle où la vache sera positionnée. Enfin, ajoutez un Box Collider 2D à l'objet de jeu de vache en répétant ces étapes.
Un Source audio composant est utilisé pour lire un clip audio lorsque le joueur récupère l’étoile. Ce composant lit le clip audio défini dans ses options et le lit lorsqu'il est appelé à partir d'un script ou au début si le Jouez sur Awake case à cocher est sélectionné.
Pour jouer un son lorsque le joueur récupère une étoile, nous devons d’abord joindre un Source audio composant à elle. Sélectionnez l'étoile parmi les Hiérarchie ou Scène voir, cliquez sur le Ajouter un composant bouton dans le Inspecteur panneau, et sélectionnez Source audio dans le l'audio section.
Comme nous voulons que le son ne soit joué que lorsque le joueur touche l’étoile, nous devons décocher la case. Jouez sur Awake option. Cliquez sur le petit point à droite, sous l'icône d'engrenage, pour sélectionner le son que vous voulez jouer..
Les ballons représentent la vie ou la santé de notre personnage principal. Lorsqu'une main entre en collision avec la vache, l'un des ballons apparaît pour indiquer qu'elle a été touchée et le nombre de vies a diminué..
Faites glisser le sprite ballon de la Les atouts au Hiérarchie panneau et puis retour à la Les atouts. Cela va créer un préfabriqué du ballon. Vous remarquerez que le texte devient bleu, indiquant qu'il s'agit maintenant d'un préfabriqué. En créant un préfabriqué, nous pouvons réutiliser la bulle sans utiliser de ressources supplémentaires..
Sélectionnez le nouveau préfabriqué et appuyez sur Commande + D le dupliquer. Utilisez le Rotation outil pour faire légèrement pivoter les ballons comme indiqué dans la capture d'écran ci-dessus.
Nous regroupons la vache et les ballons pour les déplacer un peu plus facilement. Pour ce faire, faites glisser un ballon de la Hiérarchie panneau et placez-le sur l'objet de jeu vache dans le Hiérarchie panneau. L'objet de jeu vache est mis en surbrillance pour indiquer que le fait de déposer le ballon sur celui-ci l'ajoutera en tant qu'enfant de l'objet de jeu vache. Le résultat est que le déplacement de l’objet de jeu vache modifie également la position des ballons..
Les mains sont les ennemis ou les obstacles à éviter si le joueur veut finir le niveau en collectant l'étoile. Les mains bougent d'un côté à l'autre, laissant un espace étroit au milieu pour le passage de la vache.
Comme les mains sont des objets de jeu que nous utiliserons plusieurs fois, nous le convertissons d'abord en préfabriqué, comme nous l'avons fait avec les ballons. Suivez les étapes ci-dessus pour créer le préfabriqué et utilisez les outils d'édition pour positionner les mains comme indiqué dans la capture d'écran ci-dessus..
Nous devons également ajouter un collisionneur à chaque main pour détecter les collisions. Pour ajouter le collisionneur, cliquez sur le bouton Ajouter un composant bouton dans le Inspecteur panneau et sélectionnez Box Collider 2D dans le Physique 2D section. Vous remarquerez qu'une boîte verte apparaît autour de la main lorsque vous la sélectionnez pour indiquer que la main est liée à un collisionneur..
Nous jouons également un son quand une main entre en collision avec la vache, faisant éclater un ballon. Pour ce faire, nous devons d’abord ajouter le son. Sélectionnez la main parmi les Hiérarchie ou Scène voir, cliquez sur le Ajouter un composant bouton dans le Inspecteur panneau, et sélectionnez Source audio du l'audio section.
Les détails du composant audio apparaîtront dans le Panneau de l'inspecteur. Cliquez sur le point sous l'icône d'engrenage pour sélectionner le son correct.
Le but du jeu est de collecter l'étoile à la fin de chaque niveau. Le joueur peut déplacer la vache vers le haut en soufflant sur le microphone de l'appareil.
Faites glisser l'étoile du Les atouts panneau et l'ajouter à la Scène. dans le Inspecteurde Transformer section, modifiez les valeurs comme indiqué dans la capture d'écran ci-dessous pour positionner l'étoile.
Cela placera l'étoile au sommet du niveau. Pour détecter le moment où la vache récupère l’étoile, nous devons lui ajouter un collisionneur, comme nous l’avons déjà fait plusieurs fois. Ajouter un Box Collider 2D à l'étoile.
Les alertes sont également des objets de jeu. Ce sont des messages informant le joueur lorsque le niveau est terminé ou que le jeu est terminé.
Faites glisser les alertes de la Les atouts panneau au Hiérarchie et puis retour à la Les atouts panneau pour les convertir en un préfabriqué. Plus loin dans ce didacticiel, nous ajouterons un script aux alertes et montrerons comment elles sont utilisées. N'oubliez pas de les supprimer de la Scène une fois que vous les avez convertis en préfabriqué.
Unity comprend un éditeur de code, une version de Mono Develop. Bien que ce soit un bon éditeur, vous pouvez utiliser l'éditeur que vous préférez.. Visual Studio, par exemple, est un choix populaire si vous utilisez Windows.
Vous pouvez créer un nouveau fichier en lançant votre éditeur de code, en enregistrant le fichier dans le dossier. Les atouts dossier de votre projet, puis en l'ajoutant à un GameObject, comme vous le faites avec un composant. Sinon, vous pouvez créer un nouveau script dans le Inspecteur en sélectionnant Nouveau script puis en double-cliquant dessus pour l'ouvrir.
Pour déplacer notre personnage principal, nous avons besoin d'accéder au microphone de l'appareil. Par défaut, Unity fournit un support de base pour la capture audio, mais il n'inclut pas de propriété ni de méthode pour détecter le niveau d'activité du microphone, ce dont nous avons besoin pour déplacer la vache..
Heureusement, nous pouvons utiliser un script tiers qui nous donnera accès à un intensité
propriété. le intensité
la propriété nous permettra, avec transformer.position
, déplacer la vache.
Créer un vide GameObject et nommez-le Entrée microphone. Utilisez le Ajouter un composant bouton pour joindre le script susmentionné et un Source audio composant du nouvel objet de jeu.
En faisant cela, nous activons le script et l'application commencera à capturer l'entrée du microphone. En ajustant le Sensibilité propriété dans le Inspecteur, nous contrôlons combien la vache est déplacée par l'entrée du microphone. Plus la valeur est élevée, plus la vache se déplacera rapidement. J'ai trouvé ça 50 est une bonne valeur pour commencer.
Le script suivant définit le Main
classe et contrôle le mouvement des mains. Les aiguilles se déplacent continuellement de gauche à droite et inversement. Voyons comment cela fonctionne.
La première propriété que nous utilisons dans le script est vitesse de déplacement
, une flotte
qui définit le nombre d'unités qu'une main bouge pendant chaque image. Il définit le X
valeur de la transformer.position
propriété, en déplaçant la main horizontalement.
La deuxième propriété, currentPos
, est aussi un flotte
et stocke la position actuelle de la main avant qu'elle ne bouge. Cela nous aidera à calculer le nombre d'unités que la main peut déplacer..
utiliser UnityEngine; using System.Collections; Classe publique Hand: MonoBehaviour private float moveSpeed = 0.02f; courant float privé; bool public left = false;
Enfin, le la gauche
propriété de type booléen
définit si la main se déplace vers la gauche. Cela facilite le changement de direction d’une main en réglant la la gauche
variable soit vrai
ou faux
.
le Début
méthode est une méthode définie dans le MonoBehaviour
classe qui est appelée pendant l’initialisation, avant l’appel de toute autre méthode, à l’exception de Éveillé
, que nous ne couvrirons pas dans ce tutoriel.
dans le Début
méthode, nous pouvons configurer l'objet avant tout autre code est exécuté. Dans ce cas, nous définissons la currentPos
propriété à la position actuelle de la main, avant qu'elle ne soit déplacée.
void Start () currentPos = transform.position.x;
dans le Mettre à jour
méthode, nous vérifions si la main est à gauche ou à droite et la déplaçons dans la bonne direction à chaque image. Pour ce faire, nous écrivons un si
déclaration à l'intérieur du Mettre à jour
méthode et diminuer ou augmenter la X position en utilisant le vitesse de déplacement
variable pour modifier le position
propriété.
void Update () / * Move Hand * / / * Déplacer vers la droite si la main est à gauche * / if (! left) transform.position - = new Vector3 (moveSpeed, 0, 0); else transform.position + = new Vector3 (moveSpeed, 0, 0); / * Modifie moveSpeed pour se déplacer dans l'autre sens, créant une boucle de mouvement * / if (transform.position.x <= currentPos - 0.7f) moveSpeed *= -1; if (transform.position.x >= currentPos + 0.7f) moveSpeed * = -1;
Quand la main bouge 0,7
unités, on multiplie le vitesse de déplacement
propriété par -1
faire bouger la main dans la direction opposée. Le résultat est que les mains bougent d'un côté à l'autre en une boucle continue, ce qui rend plus difficile le passage de la vache à travers les mains et l'atteinte de l'étoile..
Créez un nouveau script et attachez-le à l'objet de jeu vache. Ce script va gérer les actions du joueur et quelques autres fonctions liées aux mécanismes du jeu, telles que l'affichage des alertes. Jetons un coup d'oeil aux propriétés utilisées dans ce script.
utiliser UnityEngine; using System.Collections; Classe publique Vache: MonoBehaviour private Vector3 gravity = new Vector3 (0, 0.02f, 0); micVolume GameObject public; float privé moveSpeed; ballons sur octets privés = 3; public GameObject alertWin; public GameObject alertLose;
la gravité
: utilisé pour simuler une force verticale, il tire la vache vers le basmicVolume
: référence à la Entrée microphone
objet de jeuvitesse de déplacement
: obtient le intensité
valeur de la Entrée microphone
classedes ballons
: détient le nombre de ballons, cette valeur représente la vie du joueuralerteWin
: Référence à la alerteWin
objet de jeualertLose
: Référence à la alertLose
objet de jeuNotez que les variables publiques doivent être configurées dans l'éditeur de Unity. Ce sont toutes des références aux prefabs. Définir la valeur d'une variable dans l'éditeur est facile. Enregistrez le script et assurez-vous qu'il n'y a pas d'erreur. Revenez ensuite dans Unity et sélectionnez le objet de jeu auquel le script est attaché. Vous devriez voir les variables énumérées sous le composant de script, comme indiqué ci-dessous..
Glissez-déposez l'actif requis ou préféré dans la variable ou cliquez sur le petit point situé sous l'icône d'engrenage pour le sélectionner..
Assurez-vous que l'actif et la variable sont du type du même type ou vous ne pourrez pas le laisser tomber ou le voir quand vous cliquez sur l'icône de point.
Pour déplacer la vache vers le haut, nous allons utiliser le FixedUpdate
méthode. Pourquoi pas le régulier Mettre à jour
méthode? Cette méthode est une prédéfinie MonoBehaviour
méthode qui fonctionne chaque cadence fixe au lieu de chaque image. Cela signifie que tout se déroulera bien, même si la fréquence d'images actuelle est un peu faible. Ajoutez le bloc de code suivant au script:
void FixedUpdate () / * Déplacer la vache vers le haut en fonction du volume du micro * / moveSpeed = micVolume.GetComponent() .loudness * 0,01f; transform.position = new Vector3 (0, transform.position.y + moveSpeed, 0); / * Simulons notre propre gravité (celle-ci ne devient pas plus forte lorsqu'elle est élevée) * / transform.position - = gravité;
Nous calculons la vitesse en obtenant le volume actuel du microphone. Ce volume est obtenu à partir du Entrée microphone
classe puis multiplié par 0,01. Nous faisons cela pour empêcher la vache de se déplacer trop rapidement.
Le personnage de vache est déplacé en augmentant la y
valeur de la transformer.position
propriété, en utilisant la vitesse que nous avons stockée stockée dans vitesse de déplacement
.
En plus de déplacer la vache, nous appliquons également une force descendante, la gravité. Nous y parvenons en diminuant la position de la vache en utilisant le la gravité
vecteur que nous avons créé plus tôt. Faire cela réduira constamment la y
position de la vache sans la faire tomber plus rapidement, ce qui se produit si nous utilisions le comportement de gravité par défaut.
Dans l'étape suivante, nous détectons si une main entre en collision avec la vache. le OnTriggerEnter2D
La méthode s'exécute lorsque deux objets entrent en collision sans interaction physique. Dans ce cas, nous vérifions si la vache entre en collision avec un objet nommé "Main"
, qui peut être n'importe laquelle des mains sur la scène et jouer le son attaché à l'objet de jeu vache si la collision se produit. Vous remarquerez que nous inspectons également la propriété alpha de la vache. Pourquoi nous faisons cela est expliqué dans l'étape suivante.
void OnTriggerEnter2D (Collider2D autre) / * Collision de mains * / if (other.name == "Hand" && transform.GetComponent() .color.a == 1) other.audio.Play ();
Les collisions sont testées plusieurs fois par image, ce qui signifie que trois collisions surviendront en très peu de temps, faisant éclater tous les ballons. Puisque nous ne voulons pas que cela se produise, nous avons besoin d’un moyen d’empêcher cela..
Pour ce faire, il est utile de changer l’alpha de l’objet touché. Cela donnera également à l'utilisateur un retour visuel indiquant qu'il a été touché. Les prochaines lignes se chargeront de ça.
/ * Empêche les collisions multiples * / Couleur alpha = nouvelle couleur (1, 1, 1, 0.5f); transformer.ObtenirComposant() .color = alpha; Invoke ("EnableCollision", 1);
Nous créons d'abord un nouveau Couleur
objet et attribuez-lui la couleur de l'objet du jeu et définissez le alpha
valeur à 0.5
pour le rendre semi-transparent. On accède alors à l'objet du jeu SpriteRenderer
, ce qui nous permet de modifier sa couleur.
La dernière ligne de ce bloc de code attend une seconde, puis appelle le EnableCollision
une fonction. Cette fonction réinitialise les valeurs de couleur de la vache, ce qui la rend capable de détecter à nouveau une collision. Nous allons implémenter cette fonction plus tard dans ce tutoriel.
Lorsque la vache est touchée à la main, un ballon doit être retiré. Nous appelons le Détruire
méthode sur un objet de jeu ballon. Nous utilisons le Trouver
fonction, parce que nous n'avons pas de référence à chacun des ballons.
Cette fonction permet de rechercher les éléments du jeu et de renvoyer l’objet de jeu recherché, en l’occurrence un ballon..
/ * Supprimer un ballon * / Destroy (GameObject.Find ("Balloon")); des ballons--;
Mais attendez, n'y a-t-il pas trois ballons dans la scène? C'est correct. Cependant, le Trouver
la fonction retourne le premier match qu'elle peut trouver. En d'autres termes, il retourne le premier objet de jeu de ballon trouvé.
Nous décrémentons également le des ballons
contrer pour nous aider à savoir quand la vache a perdu toute sa vie.
Le jeu est terminé lorsque tous les ballons ont été éclatés. Pour tester cela, nous vérifions si des ballons
est égal à 0
et afficher une alerte si vrai. Nous avons également mis le la gravité
de y
propriété à 0
et mettre le jeu en pause en mettant timeScale
à 0
.
le timeScale
propriété contrôle la façon dont le temps passe dans l'environnement de jeu. Il peut être utilisé pour rendre le jeu plus rapide ou plus lent en fonction de sa valeur. L'échelle de temps par défaut est 1,0
, augmenter sa valeur accélère les fonctions associées à la fréquence d'images et sa diminution les ralentit. Le mettre à 0
met le jeu en pause pour éviter toute nouvelle collision.
/ * Game Over * / if (balloons == 0) alerte GameObject = instancie (alertLose, nouveau vecteur3 (0, 0, 0), transformation.rotation) sous forme de GameObject; gravité.y = 0; Time.timeScale = 0;
Lorsque le joueur atteint l'autre niveau du niveau, nous devons supprimer l'étoile et afficher une alerte indiquant que le niveau est terminé..
le si
statement vérifie si la collision est en fait avec l'objet star game et lit l'audio attaché à la vache si le nom est correct. Nous retirons ensuite l'étoile de la scène avant de créer l'alerte. Nous avons également mis le la gravité
de y
propriété à 0
comme nous l'avons fait à l'étape précédente.
/ * Collision en étoile * / if (other.name == "Star") audio.Play (); Destroy (other.gameObject); GameObject alert = Instantiate (alertWin, nouveau vecteur3 (0, 0, 0), transformation.rotation) sous forme de GameObject; gravité.y = 0;
le EnableCollision
Cette méthode réinitialise la valeur alpha de l’objet de jeu Vache après qu’il ait été touché par une main. Faire ceci permettra à l'objet de jeu de vache de détecter un autre coup. Notez que le Couleur
l'objet a un alpha
de 1
.
void EnableCollision () Couleur alpha = nouvelle couleur (1, 1, 1, 1); transformer.ObtenirComposant() .color = alpha;
le Recharger
méthode utilise le Application
classe pour recharger le niveau actuel. Créer un nouveau script nommé Redémarrer , ajoutez-y le bloc de code suivant et attachez-le aux deux préfabriqués d'alerte créés précédemment.
utiliser UnityEngine; using System.Collections; Classe publique Restart: MonoBehaviour void Update () if (Input.GetButton ("Fire1"))) Reload (); void Reload () Application.LoadLevel (Application.loadedLevel);
Nous testons d’abord si l’utilisateur tape sur l’écran en utilisant le bouton Contribution
classe et appelle le Recharger
méthode si vrai. La mise en œuvre de la Recharger
la méthode est courte et simple. Tout ce que nous faisons est de charger le niveau actuel, en réinitialisant chaque objet et variable à son état initial.
Il est temps de tester le jeu. presse Commande-P jouer au jeu dans Unity. Si tout fonctionne comme prévu, vous êtes prêt pour les dernières étapes.
Lorsque vous êtes satisfait de votre jeu, il est temps de sélectionner Paramètres de construction du Fichier menu et cliquez sur le Paramètres du joueur bouton. Cela devrait amener le Paramètres du joueur dans le Inspecteur panneau où vous pouvez définir les paramètres pour votre application.
Ces paramètres sont spécifiques à l’application et incluent le créateur ou la société, la résolution de l’application, le mode d’affichage, etc. Ces paramètres dépendent des appareils que vous ciblez et des magasins ou marchés sur lesquels vous publierez votre jeu..
Une fois votre projet correctement configuré, il est temps de revenir sur la Paramètres de construction et cliquez sur le Construire bouton. C'est tout ce dont vous avez besoin pour créer votre jeu à des fins de test et / ou de distribution..
Dans ce tutoriel, nous avons appris à mettre en œuvre des commandes de microphone, des interactions physiques, des feuilles de sprite et d'autres aspects du développement de jeux avec Unity. Je vous encourage à expérimenter le résultat et à personnaliser le jeu pour qu'il soit le vôtre. J'espère que vous avez aimé ce tutoriel et que vous l'avez trouvé utile.