Dans ce didacticiel, vous allez apprendre à créer un jeu 3D mobile en utilisant C # et Unity. L’objectif du jeu est d’utiliser l’accéléromètre pour déplacer le ballon et atteindre le portail.
Vous découvrirez 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 à 3D.
Dans l'étape suivante, l'interface utilisateur de Unity vous est présentée. Configurez le projet pour le développement mobile en choisissant Paramètres de construction du Fichier menu et sélection de la plateforme de votre choix.
La première chose à faire après la sélection de la plate-forme cible est de choisir la taille de l'illustration que nous allons utiliser dans le jeu. Cela nous aidera à choisir la taille appropriée pour les textures 3D et l'interface graphique 2D sans rendre les illustrations floues ni utiliser des textures trop grandes pour le périphérique cible. Par exemple, si vous ciblez un iPad avec écran Retina, l’œuvre doit avoir une résolution supérieure à celle d’un Lumia 520..
Étant donné qu'Android est une plate-forme ouverte, il existe un large éventail de périphériques, de résolutions d'écran et de densités de pixels. Quelques-uns des plus courants sont énumérés ci-dessous.
Notez que le code que nous allons écrire dans ce tutoriel peut être utilisé pour cibler n’importe laquelle des plateformes..
Selon les appareils que vous ciblez, vous devrez peut-être convertir l'illustration à la taille et à la densité de pixels recommandées. Vous pouvez le faire dans votre éditeur d'image préféré. J'ai utilisé le Ajuster la taille… fonctionner sous la Outils menu sous OS X Aperçu application.
Vous pouvez modifier la résolution affichée dans le menu Jeu panneau.
L'interface de notre jeu sera simple. La capture d'écran ci-dessus vous donne une idée de l'illustration que nous allons utiliser et de l'apparence finale de l'interface du jeu final. Vous pouvez trouver les illustrations et des ressources supplémentaires dans les fichiers sources du didacticiel sur GitHub..
Vous pouvez utiliser l'un des trois langages de programmation lorsque vous utilisez Unity., C #, UnityScript, une variante de JavaScript, et Huer. Chaque langage 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 #, donc c'est le langage que j'utiliserai 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..
J'utiliserai plusieurs sons pour améliorer l'expérience auditive du jeu. Les effets sonores utilisés dans ce didacticiel ont été obtenus auprès de playonloop.com et de Freesound..
Pour créer notre jeu, nous devons d’abord obtenir nos modèles 3D. Je recommande 3docean pour les modèles de haute qualité, les textures, etc., mais si vous testez ou apprenez, quelques modèles gratuits sont également utiles. Les modèles de ce tutoriel ont été téléchargés à partir de SketchUp 3D Warehouse où vous pouvez trouver une bonne variété de modèles de toutes sortes..
Maintenant, comme Unity ne reconnaît pas le format de fichier SketchUp, nous devons le convertir en quelque chose que Unity peut importer. Nous devons d’abord télécharger la version gratuite de SketchUp, appelée SketchUp Make..
Ouvrez votre modèle 3D dans SketchUp Make, sélectionnez Exporter> Modèle 3D du Fichier menu, et choisissez Collada (* .dae).
Choisissez un nom et un emplacement, puis cliquez sur le bouton Enregistrer. Cela créera un fichier et un dossier pour le modèle 3D. Le fichier contient les données de l'objet 3D, tandis que le dossier contient les textures du modèle. Vous pouvez ensuite importer le modèle dans Unity, comme expliqué à l'étape suivante..
Avant de commencer à coder, nous devons ajouter nos ressources 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 sommes prêts à créer la scène de notre jeu en faisant glisser des objets vers le Hiérarchie ou Scène panneau. Nous utiliserons également des objets primitifs 3D natifs Unity pour créer le niveau, comme indiqué dans les étapes suivantes..
Commençons d'abord notre Caméra principale un peu plus haut pour atteindre la vue que nous voulons. Sélectionnez-le parmi Hiérarchie panneau et ajuster le Transformer valeurs dans le Inspecteur pour correspondre à ceux indiqués ci-dessous.
Ne vous inquiétez pas si vous ne voyez aucun changement. Nous n'avons encore rien créé pour la caméra. Ensuite, utilisez le Inspecteur pour définir le Contexte couleur à RVB: 0, 139, 252.
Notre niveau de plate-forme sera flottant au-dessus d'un fond, qui sera une représentation d'une mer. Il sera créé en utilisant les primitives Unity, un simple Avion avec une texture appliquée.
Bien qu'Unity puisse travailler avec des objets 3D de tout type créés par d'autres programmes, il est parfois plus facile et / ou plus pratique d'utiliser des primitives pour des prototypes..
Pour créer la mer, par exemple, sélectionnez Créer Autre> Avion du GameObject menu et ajuster le Transformer valeurs dans le Inspecteur pour correspondre à ceux indiqués ci-dessous.
Vous devriez une place dans le Scène panneau. Nous allons l'utiliser pour détecter le moment où le joueur tombe de la plate-forme, mettant ainsi fin au jeu..
Il est à noter que ces objets primitifs ont déjà une Collisionneur qui leur est associé, ce qui signifie qu’ils détecteront automatiquement les collisions ou déclencheront des événements lorsqu’ils entreront en contact avec un Corps rigide.
Pour appliquer une texture à l’avion marin, nous devons créer un Matériel. UNE Matériel est utilisé pour définir comment un GameObject et il est essentiel d’ajouter une texture à un GameObject.
Sélectionner Créer> Matériel du Les atouts menu pour en créer un, trouvez-le dans le Les atouts panneau, et utiliser le Inspecteur pour sélectionner la texture que vous souhaitez utiliser comme votre mer. Ce sont les paramètres que j'ai utilisés:
Vous remarquerez un message dans la section du matériel indiquant qu'il est recommandé d'utiliser Mobile / Diffuse en tant que shader, car la couleur blanche par défaut ne fait rien. En le changeant en Mobile/Diffuser aidera également à la performance.
Vous avez peut-être remarqué que la mer est un peu plus sombre qu'elle ne devrait l'être. Pour résoudre ce problème, nous devons ajouter un Lumière à notre scène. Sélectionner Créer autre du GameObject menu et sélectionnez Lumière directionnelle. Cela va créer un objet qui produit un faisceau de lumière. Changer son Transformer valeurs indiquées dans la capture d'écran suivante pour éclairer la mer.
Cela a l'air beaucoup mieux.
Les plates-formes font partie de notre niveau et sont utilisées par le joueur pour déplacer le ballon vers le portail situé de l'autre côté de la mer..
Créer un Avion comme vous l'avez fait pour la mer et ajuster la Transformer valeurs dans le Inspecteur comme indiqué ci-dessous. Cela va créer et mettre en place la première plateforme.
Nous pouvons maintenant utiliser l'unité Bouge toi et Rotation outils pour créer les autres plates-formes. Ils sont tous de la même taille afin que nous puissions les utiliser verticalement ou horizontalement en les dupliquant en utilisant Commande + D sur OS X et Contrôle + D sous Windows.
Créer un nouveau Matériel comme nous l'avons fait dans Étape 14 et appliquer la texture à elle. Le mien ressemble à ceci:
Ajuste le X et y carrelage jusqu'à ce que vous soyez satisfait du résultat.
Nous devons créer une bordure pour empêcher notre joueur de tomber trop facilement. Pour ce faire, nous allons utiliser un nouveau type de primitive, un Cylindre.
Sélectionner Créer autre> Cylindre du GameObject menu et ajuster le Transformer valeurs dans le Inspecteur comme indiqué ci-dessous.
Cela ajoutera une petite bordure au bord de la première plateforme. Créer un nouveau Matériel et changer sa couleur dans le Inspecteur à RVB: 255, 69, 0.
Le résultat devrait ressembler à ceci:
Utilisation Commande + D (Contrôle + D sous Windows)dupliquer la bordure et la Échelle outil pour changer sa taille. Positionnez les doublons sur les bords des plateformes à l'aide des outils de Unity.
Le portail est la ligne de but du jeu. Le joueur utilisera l'accéléromètre pour contrôler le ballon et l'emmènera à cet endroit tout en ramassant des objets et en évitant de tomber de la plate-forme. Le portail est un modèle 3D, que nous avons importé dans Étape 10.
Glissez et déposez-le sur le Scène ou Hiérarchie panneau et changer sa Transformer valeurs aux valeurs suivantes:
Cela le positionnera au bout des quais.
Les modèles 3D importés ne disposant pas de collisionneur par défaut, vous devez en attacher un. Comme nous n'avons qu'à tester si la balle frappe la zone bleue du portail, nous y attacherons le collisionneur.
Regardez le modèle de portail dans le Hiérarchie voir et vous remarquerez un petit triangle à la gauche de son nom. Cliquez sur le triangle pour développer le groupe du portail et sélectionner le premier élément. J'ai ajouté le -Collisionneur suffixe pour clarification.
Clique le Ajouter un composant bouton dans le Inspecteur et choisir Physique> Collisionneur. Cela va ajouter un collisionneur utilisant la forme de la zone sélectionnée du modèle.
Pour informer le joueur, nous allons jouer un effet sonore lorsque la balle touche le collisionneur du portail. Comme nous allons déclencher l'événement à l'aide du collisionneur créé précédemment, nous devons ajouter la source audio à ce même objet..
Sélectionnez-le parmi Hiérarchie panneau, cliquez sur le Ajouter un composant bouton dans le Inspecteur panneau, et sélectionnez Source audio du l'audio section.
Décocher Jouez sur Awake et cliquez sur le petit point à droite, sous l'icône d'engrenage, pour sélectionner le son que vous souhaitez lire..
Les îles ne sont que des éléments décoratifs pour rendre le niveau moins vide. J'ai utilisé un modèle 3D importé et un Cylindre pour les faire. Je n'entrerai pas dans les détails pour la création des îles car elles ne sont pas essentielles au jeu. Avec ce que vous avez appris jusqu'à présent, vous devriez pouvoir les créer vous-même..
Comme dans Monkey Ball, le joueur pourra collecter des bananes pendant la partie. Commencez par faire glisser le modèle de la Les atouts panneau au Scène. Ne vous inquiétez pas pour l'instant de son emplacement, car nous le convertirons en Préfabriqué plus tard, car nous allons le réutiliser plusieurs fois.
Comme je l'ai mentionné plus tôt, les modèles importés n'ont pas de collisionneur par défaut. Nous devons donc en attacher un à la banane. Clique le Ajouter un composant bouton dans le Inspecteur et choisir Physique> Collisionneur. Cela va ajouter un collisionneur utilisant la forme du modèle. Assurez-vous de vérifier le Déclencheur case à cocher, car nous voulons détecter les collisions, mais nous ne voulons pas que le ballon réagisse avec la banane.
Il est temps de créer notre personnage de jeu, qui sera simple Sphère primitif. Sélectionner Créer autre> Sphère du GameObject menu pour créer la primitive et modifier le Transformer valeurs dans le Inspecteur comme indiqué ci-dessous.
Cela va créer la sphère et la positionner au début de notre niveau.
Pour rendre la sphère semi-transparente, nous devons changer sa Shader options. Ouvrez le Inspecteur et changez le shader en Transparent / diffus.
Pour détecter une collision avec le joueur, nous devons attacher un Corps rigide à cela. Pour en ajouter un, sélectionnez Ajouter un composant du Inspecteur panneau, suivi de La physique > Corps rigide. Vous pouvez laisser les paramètres à leurs valeurs par défaut.
Pour afficher l'interface utilisateur du jeu, nous allons utiliser les textures graphiques de Unity. La documentation de Unity fournit une explication claire des textures d'interface graphique:
Les textures graphiques sont affichées sous forme d'images plates en 2D. Ils sont spécialement conçus pour les éléments d'interface utilisateur, les boutons et les décorations. Leur positionnement et leur mise à l'échelle sont effectués uniquement sur les axes x et y, et ils sont mesurés en coordonnées d'écran plutôt qu'en coordonnées mondiales..
Par défaut, les images importées dans le Les atouts dossier sont convertis en Les textures qui peut être appliqué à des objets 3D. Nous devons changer cela en Texture de l'interface graphique pour les images que nous voulons utiliser dans l'interface utilisateur du jeu.
Sélectionnez les images que vous souhaitez convertir dans le Les atouts panneau et ouvrez le Inspecteur, clique sur le Type de texture menu déroulant et sélectionnez Interface graphique.
Vous pouvez maintenant faire glisser les images vers le Scène. Les images apparaîtront toujours devant chaque objet de la scène et seront traitées comme des éléments 2D..
Dans chaque élément de l'interface graphique, nous afficherons un nombre indiquant le nombre de bananes que le joueur a collectées et le temps qu'il lui reste..
Sélectionner Créer autre> Texte d'interface graphique du GameObject menu pour créer un objet texte, placez-le au centre de l’élément graphique et modifiez le texte dans Hiérarchie panneau à 0. Faites la même chose pour le moment à droite. J'ai réglé l'heure par défaut à 30 secondes.
Vous pouvez utiliser une police personnalisée pour le texte en l'ajoutant à la police. Les atouts dossier, puis en changeant le Police de caractère propriété du texte dans le Inspecteur.
Il est temps d'écrire du code. Avec l'interface utilisateur en place, nous pouvons commencer à écrire le code nécessaire pour ajouter des fonctionnalités à notre jeu. Nous faisons cela au moyen de scripts. Les scripts sont attachés à différents objets du jeu. Suivez les étapes suivantes pour apprendre à ajouter une interaction au niveau que nous venons de créer..
Nous allons commencer par utiliser le périphérique accéléromètre. Déplacer le lecteur à l’aide de l’accéléromètre est assez simple dans Unity. Il n'y a rien à installer et c'est facile à comprendre.
Sélectionnez la scène, cliquez sur le bouton Ajouter un composant bouton dans le Inspecteur panneau, et choisissez Nouveau script. Nommez le script MoveScene
et n'oubliez pas de changer le langage en C #. Ouvrez le fichier nouvellement créé et ajoutez l'extrait de code suivant..
utiliser UnityEngine; using System.Collections; Classe publique MoveScene: MonoBehaviour void Update () transform.rotation * = Quaternion.Euler (Input.acceleration.y / 6, -Input.acceleration.x / 3, 0);
Nous utilisons le Mettre à jour
méthode pour demander des données de l'accéléromètre dans chaque image en utilisant le Entrée.accélération
propriété, qui mesure le mouvement de l'appareil dans un espace tridimensionnel. Cela nous permet d’obtenir le X, y, et z valeurs, et les utiliser pour contrôler la position du joueur.
Nous appliquons ensuite les valeurs obtenues au transformation.rotation
propriété du niveau en invoquant Quaternion.Euler
, qui renvoie les valeurs de rotation. Notez que nous divisons les valeurs de l'accéléromètre pour éviter que le joueur ne se déplace trop rapidement, ce qui rend le jeu difficile..
Nous ne modifions que le niveau X et y valeurs, car nous n’avons besoin que d’inclinaison et de ne pas nous rapprocher ou nous éloigner de la caméra.
Le script suivant est attaché à la Caméra principale. Il calcule l'espace entre la caméra et le joueur et le maintient pendant que le ballon se déplace.
utiliser UnityEngine; using System.Collections; public class FollowPlayer: MonoBehaviour public, joueur GameObject; joueur privé Vector3; // Utiliser ceci pour l'initialisation void Start () playerOffset = transform.position - player.transform.position; // La mise à jour est appelée une fois par image. Void Update () transform.LookAt (player.transform); transform.position = player.transform.position + playerOffset;
Le script utilise deux variables qui méritent d’être expliquées:
joueur
: Ceci est une référence au joueur dans le Scène. Vous pouvez définir cela dans le Inspecteur.playerOffset
: Ceci est la distance entre la caméra et le lecteur. Parce que nous maintenons la même distance entre la caméra et le joueur, la caméra suit le joueur au fur et à mesure de ses déplacements. Le décalage est calculé dans le Début
méthode.Nous dirigeons la caméra vers le joueur et définissons sa position sur celle du joueur. plus la valeur de playerOffset
. Parce que nous faisons cela dans le Mettre à jour
méthode, la position de la caméra est calculée et mise à jour à chaque image. Le résultat est que la caméra suit le joueur. C'est une stratégie simple mais efficace pour créer une caméra qui suit le joueur..
Le script suivant est associé à la banane et gère toutes les interactions avec celle-ci. Nous commençons par obtenir des références au son correspondant et au texte affichant le nombre de bananes collectées, dont nous aurons besoin pour jouer le son et augmenter le compteur en haut à gauche lorsque le joueur entre en collision avec une banane. Une fois que vous avez déclaré les variables dans le script, vous devez définir ces références dans le Inspecteur.
utiliser UnityEngine; using System.Collections; classe publique PickBanana: MonoBehaviour public AudioClip bananaSound; GUIText public bananaText; void OnTriggerEnter (Collider autre) AudioSource.PlayClipAtPoint (bananaSound, transform.position); int score = int.Parse (bananaText.text) + 1; bananaText.text = score.ToString (); Détruire (gameObject);
Ensuite, nous appelons une méthode qui détecte le moment où la balle entre en collision avec une banane. Lorsque cela se produit, nous jouons le son et augmentons le compteur.
Pour modifier le compteur, nous créons une variable en utilisant la valeur de Texte de l'interface graphique et utiliser le int.Parse
méthode pour convertir la chaîne en un nombre et incrémenter le nombre en 1. Nous définissons ensuite la valeur sur Texte de l'interface graphique, d’abord convertir le nombre en chaîne en invoquant le toString
méthode. Enfin, nous invoquons Détruire
supprimer l'objet de jeu banane.
La classe suivante est utilisée pour détecter le moment où le joueur tombe de la plate-forme dans la mer. Attachez le script à l'objet de jeu de la mer.
utiliser UnityEngine; using System.Collections; public class Lose: MonoBehaviour void OnCollisionEnter () audio.Play (); Invoke ("Recharger", 1.59f); void Reload () Application.LoadLevel (Application.loadedLevel);
Cette classe simple utilise le OnCollisionEnter
méthode pour détecter le moment où le ballon entre en collision avec la mer, ce qui signifie que le joueur est tombé de la plate-forme. Lorsque cela se produit, nous jouons le son attaché à la mer et utilisons le Invoquer
méthode pour appeler le Recharger
méthode, qui redémarre le jeu en rechargeant la scène en cours.
Le deuxième paramètre de la Invoquer
méthode définit le délai dans lequel le Recharger
La méthode est invoquée. C'est nécessaire car nous voulons d'abord que le son se termine avant de commencer un nouveau jeu..
Le prochain cours, Minuteur
, est attaché à l'interface graphique de l'heure en haut à droite. Il réduit le temps et termine le jeu lorsque le compteur atteint 0.
utiliser UnityEngine; using System.Collections; public class Timer: MonoBehaviour public GUIText timeText; void Start () InvokeRepeating ("ReduceTime", 1, 1); void ReduceTime () int currentTime = int.Parse (timeText.text) - 1; timeText.text = currentTime.ToString (); if (currentTime == 0) audio.Play (); Invoke ("Reload", 1.59f); // attend que le son soit joué pour recharger Destroy (timeText); void Reload () Application.LoadLevel (Application.loadedLevel);
Nous gardons une référence au texte dans le timeText
variable pour faciliter la modification de l'interface utilisateur. dans le Début
méthode, nous appelons le InvokeRepeating
méthode, qui appelle à plusieurs reprises le Réduire le temps
méthode à plusieurs reprises.
Pour mettre à jour le texte dans l'interface utilisateur, nous créons une variable qui convertit le texte en nombre, comme nous l'avons fait précédemment, et soustrayons une seconde et mettons à jour l'interface utilisateur avec le résultat..
Quand le compteur atteint 0, le son approprié est joué et nous détruisons le texte du compteur. Nous invoquons le Recharger
méthode avec un délai pour redémarrer le jeu lorsque le son est terminé.
La dernière classe, EndLevel, est utilisée pour détecter le moment où le joueur atteint le portail. Lorsque le joueur passe à travers le portail, nous affichons un message à l'écran et détruisons détruisons le ballon. Nous faisons cela pour empêcher le ballon de tomber dans la mer.
utiliser UnityEngine; using System.Collections; public class EndLevel: MonoBehaviour public GameObject complete; joueur public GameObject; void OnTriggerEnter (Collider autre) audio.Play (); Invoke ("Redémarrer", 2); Alerte GameObject = Instanciation (complète, nouveau vecteur3 (0.5f, 0.5f, 0), transformation.rotation) en tant que GameObject; Détruire (player.rigidbody); void Restart () Application.LoadLevel (Application.loadedLevel);
le Instancier
Cette méthode est utilisée pour créer une instance du message affiché au lecteur. Il nous permet d’utiliser l’élément graphique du projet. Les atouts au lieu de l'avoir sur la scène. Enfin, on redémarre le jeu avec un délai de deux secondes..
Il est temps de tester le jeu. presse Commande + P jouer au jeu dans Unity. Si tout fonctionne comme prévu, alors vous êtes prêt pour les étapes finales.
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 des données spécifiques à l'application, notamment le créateur ou la société, la résolution et le mode d'affichage de l'application, le mode de rendu (CPU, GPU), la compatibilité du système d'exploitation, etc. Configurez les paramètres en fonction des appareils ciblés et du magasin ou du marché où vous envisagez de publier l'application.
En utilisant les graphiques que vous avez créés précédemment, vous pouvez maintenant créer une jolie icône et une image de démarrage pour votre jeu. Unity vous indique les tailles requises, qui dépendent de la plate-forme pour laquelle vous construisez..
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 à utiliser l'accéléromètre pour contrôler les mouvements du lecteur, les textures d'interface graphique, les primitives et d'autres aspects du développement de jeux dans 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.