Créez un jeu inspiré par les ninja des fruits avec Unity

Ce que vous allez créer

introduction

Dans ce didacticiel, vous allez apprendre à créer un jeu 3D mobile en utilisant C # et Unity. L'objectif du jeu est de couper le fruit qui apparaît sur la scène en utilisant l'écran tactile.

Vous découvrirez les aspects suivants du développement de jeux Unity dans ce tutoriel:

  • importer des modèles 3D
  • balayer les gestes
  • ligne de rendu
  • forces de la physique
  • Sprites 2D

L'interface utilisateur du jeu est simple. La capture d'écran ci-dessous vous donne une idée de l'illustration que nous allons utiliser et de la structure finale de l'interface utilisateur. Vous pouvez trouver les illustrations et des ressources supplémentaires dans les fichiers sources du didacticiel sur GitHub..

1. Configuration du projet

Étape 1: Créer un nouveau projet Unity

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.

Étape 2: Configurer les paramètres de construction

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.

Étape 3: oeuvre d'art

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..

iOS

  • iPad sans rétine: 1024px x 768px
  • iPad avec rétine: 2048px x 1536px
  • 3.5 "iPhone / iPod Touch sans rétine: 320px x 480px
  • 3.5 "iPhone / iPod avec Retina: 960px x 640px
  • 4 "iPhone / iPod Touch: 1136px x 640px

Android

É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.

  • Asus Nexus 7 Tablet: 800px x 1280px, 216 ppi
  • Motorola Droid X: 854 pixels x 480 pixels, 228 pixels
  • Samsung Galaxy SIII: 720px x 1280px, 306 ppi

Windows Phone et BlackBerry

  • Blackberry z10: 720px x 1280px, 355 ppi
  • Nokia lumia 520: 400px x 800px, 233 ppi
  • Nokia Lumia 1520: 1080px x 1920px, 367 ppp

Notez que le code que nous allons écrire dans ce tutoriel peut être utilisé pour cibler n’importe laquelle des plateformes..

Étape 4: Exporter des graphiques

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.

Étape 5: configuration de l'interface utilisateur de Unity

Avant de commencer, assurez-vous que le 2D bouton dans le Scène panneau n'est pas en surbrillance. Vous pouvez également modifier la résolution affichée dans le Jeu panneau.

Vous êtes ensuite présenté avec les panneaux de l'espace de travail, que nous allons également utiliser dans ce tutoriel. Prenez un moment pour regarder les principaux panneaux d’interface, tels que le ScèneJeu, Hiérarchie, Projet, Les atouts, et Inspecteur. Nous les utiliserons fréquemment dans ce tutoriel.

Étape 6: Langage de programmation

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..

2. ressources

Effets sonores

J'utiliserai plusieurs sons pour améliorer l'expérience auditive du jeu. Les effets sonores utilisés dans ce tutoriel ont été obtenus à partir de PlayOnLoop et Freesound.

Modèles 3D

Pour créer le jeu, nous devons d’abord obtenir quelques modèles 3D. Je recommande 3docean pour les modèles et les textures de haute qualité, mais si vous testez ou apprenez, les modèles gratuits fonctionnent tout aussi bien. Les modèles de ce didacticiel ont été téléchargés à partir de SketchUp 3D Warehouse où vous pouvez trouver une grande variété de modèles 3D..

Comme Unity ne reconnaît pas le format de fichier SketchUp, nous devons le convertir en un élément pouvant être importé par Unity. Nous devons d’abord télécharger la version gratuite de SketchUp, appelée SketchUp Make..

Ouvrez le 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 sauvegarder. 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. Dans l'étape suivante, nous allons importer le modèle dans Unity..

3. Importer des actifs

Avant de commencer à coder, nous devons ajouter les actifs au projet Unity. Vous pouvez le faire de plusieurs manières:

  • sélectionner Importer un nouvel actif du Les atouts menu
  • faites glisser les éléments dans la fenêtre du projet
  • ajouter les éléments au dossier des actifs du projet

Une fois cette étape terminée, vous devriez voir les actifs dans le projet. Les atouts dossier dans le Projet panneau.

4. Configuration de la caméra et de l'éclairage

Étape 1: Configuration de la caméra

Dans cette étape, nous positionnons la caméra principale pour créer la vue souhaitée. Sélectionnez la caméra principale à partir du 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.

Étape 2: Mise en place de la lumière

Pour que nos objets soient visibles dans le monde 3D, nous devons ajouter de la lumière à la 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 scène.

La lumière doit être visible sur la scène, comme indiqué dans la capture d'écran suivante..

5. Ajouter un fond

Nous allons utiliser un Lutin texture comme notre fond. Par défaut, les images importées dans le Les atouts dossier sont convertis en Texture instances qui peuvent être appliquées à des objets 3D. Nous devons changer ces Texture des instances à Texture de sprite instances pour l'image que nous voulons utiliser comme arrière-plan.

Sélectionnez l'image que vous souhaitez convertir dans le Les atouts panneau et ouvrez le Inspecteur. Sélectionner Lutin du Type de texture menu.

Glissez et déposez l’arrière-plan dans le Hiérarchie panneau. Il devrait apparaître automatiquement dans le Scène panneau. Ajuste le Transformer valeurs dans le Inspecteur comme indiqué dans la capture d'écran suivante.

6. Créer l’interface graphique Score

Pour afficher le score du jeu, nous utiliserons celui de Unity. Texte de l'interface graphique et un modèle 3D importé.

Étape 1: Ajout du modèle Apple

Sélectionnez le modèle 3D importé de votre choix dans la liste. Les atouts panneau et faites-le glisser sur le Scène. Je vais utiliser un modèle de pomme. Ajuste le Transformer valeurs dans le Inspecteur pour correspondre à ceux indiqués ci-dessous.

Cela placera la pomme en haut à gauche de l'écran.

Étape 2: Ajout du texte de l'interface graphique

Avec le modèle Apple, nous afficherons un nombre indiquant le score du joueur. C'est le nombre de fruits que le joueur a coupés.

Sélectionner Créer autre> Texte d'interface graphique du GameObject menu pour créer un objet texte, placez-le à droite du modèle apple et modifiez le texte dans Inspecteur panneau à 0.

Vous pouvez incorporer une police personnalisée en l’important dans le Les atouts dossier et changer le Police de caractère propriété du texte dans le Inspecteur.

7. Créer l'interface graphique du minuteur

Nous utiliserons une minuterie pour indiquer la fin du jeu. Il est composé d'un Texture de l'interface graphique montrant une icône et un Texte de l'interface graphique afficher le temps restant.

Étape 1: Ajout de l'icône d'horloge

Pour ajouter l’icône de l’horloge, sélectionnez l’image que vous souhaitez utiliser dans la liste. Les atouts panneau et ouvrez le Inspecteur. Sélectionner Interface graphique du Type de texture menu pour le convertir en une texture graphique. Faites glisser et déposez l'image sur le Scène et changez ses valeurs de transformation à celles indiquées ci-dessous.

La scène devrait maintenant ressembler à ceci.

Étape 2: Ajout du texte de l'interface graphique

Répétez les étapes pour ajouter le texte de partition pour ajouter le texte du minuteur. N'oubliez pas de régler le texte à la bonne heure.

8. Prefab d'alerte

L'alerte est un Texture de l'interface graphique que nous montrerons quand le minuteur atteint 0. Il affichera un message de jeu au centre de l'écran.

Pour créer l'alerte, convertissez votre image d'alerte en un Texture de l'interface graphique en utilisant le Inspecteur. Faites-le glisser du Hiérarchie panneau au Les atouts panneau pour le convertir en un Préfabriqué.

9. Minuteur Classe

Mettons maintenant en œuvre le Minuteur classe. Sélectionnez le Time GUI Text, clique le Ajouter un composant bouton dans le Inspecteur panneau, et choisissez Nouveau script. Nommez le script Minuteur et n'oubliez pas de changer le langage en C #. Ouvrez le fichier nouvellement créé et suivez les étapes suivantes.

Étape 1: Déclarer des variables

Nous commençons par créer un certain nombre de variables que nous utiliserons dans le Minuteur classe.

private GUIText timeTF; Alerte publique GameObjectRéférence

Jetons un coup d'oeil à chacune des variables.

  • timeTF: une référence au texte de l'interface graphique de l'heure
  • alertRéférence: une référence au prefab d'alerte

Nous utiliserons ces références pour accéder à l’heure, alerter les objets du jeu et en modifier les valeurs. Définissez le préfabriqué d'alerte dans Inspecteur.

Étape 2: Configuration

Avec les variables déclarées, nous définissons la timeTF valeur en accédant à la guiText propriété de l'objet de jeu en cours. Cela nous permettra de modifier la valeur du texte ultérieurement.

Nous appelons aussi le InvokeRepeating méthode, qui invoquera le Réduire le temps méthode chaque seconde.

void Start () timeTF = gameObject.guiText; InvokeRepeating ("Réduire le temps", 1, 1); 

Étape 3: Mettre en œuvre Réduire le temps

le Réduire le temps Cette méthode est chargée de mettre à jour le texte du minuteur et d’afficher le message d’alerte. Le jeu est terminé lorsque le temps est écoulé 0. Ajoutez le bloc de code suivant au Minuteur classe.

void ReduceTime () if (timeTF.text == "1") / * Alert * / Time.timeScale = 0; Instanciation (alertReference, nouveau Vector3 (0.5f, 0.5f, 0), transformation.rotation); audio.Play (); GameObject.Find ("AppleGUI"). GetComponent().Arrêtez();  timeTF.text = (int.Parse (timeTF.text) - 1) .ToString (); 

Nous commençons par tester si le temps est sur le point de se terminer. Si vrai, nous mettons en pause le jeu en changeant la timeScale propriété à 0, créer une instance de l'alerte et jouer le jeu avec le son.

Si le temps ne se termine pas, nous réduisons simplement sa valeur en 1. Pour ce faire, nous utilisons le int.Parse méthode pour convertir la chaîne temporelle en nombre, soustraire 1, et appeler ToString dessus pour reconvertir le résultat en chaîne.

Étape 4: Recharger Méthode

Ceci est la dernière partie de la Minuteur classe. dans le Recharger méthode, nous appelons LoadLevel sur le Application classe et recharge le niveau actuel, réinitialisant chaque objet et variable à son état initial.

void Reload () Application.LoadLevel (Application.loadedLevel); 

Voici à quoi devrait ressembler la classe complète lorsque vous aurez terminé.

utiliser UnityEngine; using System.Collections; public class Timer: MonoBehaviour private GUIText timeTF; public GameObject alertReference; void Start () timeTF = gameObject.guiText; InvokeRepeating ("Réduire le temps", 1, 1);  void ReduceTime () if (timeTF.text == "1") / * Alerte * / Time.timeScale = 0; Instanciation (alertReference, nouveau Vector3 (0.5f, 0.5f, 0), transformation.rotation); audio.Play (); GameObject.Find ("AppleGUI"). GetComponent().Arrêtez();  timeTF.text = (int.Parse (timeTF.text) - 1) .ToString ();  void Reload () Application.LoadLevel (Application.loadedLevel); 

10. Préfabriqué Apple

La pomme est l'un des éléments les plus importants du jeu et l'un des objets interactifs de l'écran. Le joueur peut utiliser l'écran tactile de l'appareil pour couper la pomme et augmenter son score..

Faites glisser la pomme du Les atouts panneau au Scène. Ne vous inquiétez pas de sa position, car nous le convertirons en un Préfabriqué dans un instant et retirez-le de la Hiérarchie.

Étape 1: Ajouter un corps rigide

Pour détecter une collision avec la pomme, nous devons ajouter un Corps rigide à cela. Pour en ajouter un, sélectionnez Ajouter un composant du Inspecteur panneau et choisissez Physique> Rigidbody. Vous pouvez laisser les paramètres à leurs valeurs par défaut.

Étape 2: Ajouter un collisionneur de boîtes

Nous devons également ajouter un collisionneur de boîtes à la pomme pour détecter les collisions. Ce collisionneur définira la zone touchée par la pomme. Clique le Ajouter un composant bouton dans le Inspecteur panneau, choisissez Physique> Box Collider, et changez ses valeurs comme indiqué dans la capture d'écran ci-dessous.

dans le Scène panneau, une boîte verte devrait apparaître autour de la pomme, représentant le collisionneur de boîte que nous venons d'ajouter.

11. préfabriqué Splash

Le préfabriqué splash sera utilisé comme effet visuel lorsque le fruit est coupé en tranches par le joueur. Il apparaîtra sur la scène pour chaque fruit que le joueur coupera et disparaîtra lentement au fil du temps. Convertir l'image en un Lutin comme décrit précédemment et l'ajouter à la Scène.

Ajoutez un script à celui-ci et faites-le glisser vers le Les atouts panneau pour créer un Préfabriqué. Ouvrez la classe nouvellement créée.

12. Éclaboussure Classe

le Éclaboussure la classe gère les images créées lorsque le fruit est coupé en tranches.

Étape 1: Déclarer des variables

Ces variables permettent de calculer et de définir une valeur alpha pour le préfabriqué splash. En modifiant sa propriété alpha, nous pouvons atténuer le préfabriqué au fil du temps..

couleur privée randomAlpha; courant float privéAlpha;

Étape 2: Configuration

Dans cette méthode, nous calculons une valeur alpha aléatoire à partir de 0,3 à 0.5 et stocker cette valeur dans le randomAlpha variable. Nous définissons ensuite l'alpha résultant sur le Couleur propriété de l'objet de jeu.

Dans la dernière ligne de code, nous appelons la méthode qui diminuera cette valeur chaque 300 millisecondes, créant un effet de fondu.

void Start () randomAlpha = new Color (1, 1, 1, Random.Range (0.3f, 0.5f)); gameObject.renderer.material.color = randomAlpha; InvokeRepeating ("Réduire Alpha", 0.3f, 0.3f); 

Étape 3: Réduisez l’alpha et détruisez

Pour réduire l’alpha, nous devons d’abord obtenir la valeur actuelle. le courantAlpha variable stocke cette valeur. On soustrait ensuite 0,1 à partir de cette valeur et réaffecter le nouvel alpha à l’objet du jeu. L'image est supprimée lorsqu'elle est presque invisible.

void ReduceAlpha () currentAlpha = gameObject.renderer.material.color.a; if (gameObject.renderer.material.color.a <= 0.1f)  Destroy(gameObject);  else  gameObject.renderer.material.color = new Color(1, 1, 1, currentAlpha - 0.1f);  

C'est ce que le Éclaboussure la classe ressemble.

utiliser UnityEngine; using System.Collections; Classe publique Splash: MonoBehaviour private Color randomAlpha; courant float privéAlpha; void Start () randomAlpha = new Color (1, 1, 1, Random.Range (0.3f, 0.5f)); gameObject.renderer.material.color = randomAlpha; InvokeRepeating ("Réduire Alpha", 0.3f, 0.3f);  void RéductionAlpha () currentAlpha = gameObject.renderer.material.color.a; if (gameObject.renderer.material.color.a <= 0.1f)  Destroy(gameObject);  else  gameObject.renderer.material.color = new Color(1, 1, 1, currentAlpha - 0.1f);    

13. Pomme Classe

Avec notre préfabriqué splash créé, nous pouvons maintenant continuer avec le Pomme classe. Cette classe gérera des actions telles que la détection de collision, la mise à jour du score et le retrait de la pomme de la scène..

Étape 1: Déclarer des variables

Trois variables sont déclarées dans la Pomme classe:

  • splashReference: référence au préfabriqué splash
  • randomPos: position pour le préfabriqué splash
  • scoreRéférence: référence au texte de l'interface graphique de la partition
[SerializeField] private GameObject splashReference; vecteur privé3 randomPos = nouveau vecteur3 (plage aléatoire (-1, 1), plage aléatoire (0.3f, 0.7f), plage aléatoire (-6.5f, -7.5f)); partition privée GUIText scoreReference;

Étape 2: Obtenir une référence de score

Pour obtenir une référence au texte de la partition, nous utilisons le Trouver méthode. Cette méthode recherche les objets de jeu actifs et renvoie l'objet recherché, le score. Texte de l'interface graphique dans ce cas.

void Start () scoreReference = GameObject.Find ("Score"). guiText; 

Avec le scoreRéférence ensemble variable, nous pouvons maintenant augmenter sa valeur quand un fruit est coupé en tranches.

Étape 3: Détruire en dehors de la scène

dans le Mettre à jour méthode, nous vérifions si le fruit n'est plus visible à l'écran en accédant à son y la position et l'enlever si vrai. Cela nous aide à libérer de la mémoire en détruisant les objets de jeu inutilisés.

void Update () / * Supprime les fruits s'ils ne sont pas visibles * / if (gameObject.transform.position.y < -36)  Destroy(gameObject);  

Étape 4: gérer les collisions

Le code suivant utilise le OnCollisionEnter méthode pour détecter quand le fruit est coupé en tranches par le joueur. Lorsque cela se produit, nous jouons le son coupé et retirons le fruit. Ensuite, nous créons une nouvelle instance du préfabriqué splash et mettons à jour le score..

void OnCollisionEnter (Collision other) if (other.gameObject.name == "Line") Camera.main.GetComponent().Jouer(); Détruire (gameObject); Instancier (splashReference, randomPos, transform.rotation); / * Score de mise à jour * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString (); 

C'est ce que la complète Pomme la classe ressemble.

utiliser UnityEngine; using System.Collections; public class Apple: MonoBehaviour [SerializeField] private GameObject splashReference; vecteur privé3 randomPos = nouveau vecteur3 (plage aléatoire (-1, 1), plage aléatoire (0.3f, 0.7f), plage aléatoire (-6.5f, -7.5f)); partition privée GUIText scoreReference; void Start () scoreReference = GameObject.Find ("Score"). guiText;  void Update () / * Supprime les fruits s'ils ne sont pas visibles * / if (gameObject.transform.position.y < -36)  Destroy(gameObject);   void OnCollisionEnter(Collision other)  if(other.gameObject.name == "Line")  Camera.main.GetComponent().Jouer(); Détruire (gameObject); Instancier (splashReference, randomPos, transform.rotation); / * Score de mise à jour * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString (); 

14. FruitSpawner Classe

le FruitSpawner La classe instancie et déplace les fruits vers la scène. Il est attaché à la caméra principale.

Étape 1: Déclarer des variables

Ce sont les variables déclarées dans cette classe.

[SerializeField] private GameObject appleReference; privé Vector3 throwForce = nouveau Vector3 (0, 18, 0);
  • appleReference: référence au préfabriqué pomme
  • throwForce: la force utilisée pour pousser les fruits vers le haut

Étape 2: Invoquer Spawn

Dans les prochaines lignes de code, nous appelons le InvokeRepeating méthode pour invoquer le SpawnFruit méthode toutes les six secondes. Cela ajoutera de nouveaux fruits à la scène toutes les six secondes, donnant au joueur le temps de les trancher avant que les fruits ne tombent au bas de la scène..

void Start () InvokeRepeating ("SpawnFruit", 0.5f, 6); 

Étape 3: SpawnFruit Méthode

le SpawnFruit La méthode crée les fruits et les pousse vers le haut pour que le joueur les coupe. Nous utilisons un pour déclaration pour instancier les fruits, les positionner au hasard sur la scène et appliquer une force physique à l'aide du addForce méthode.

void SpawnFruit () pour (octet i = 0; i < 4; i++)  GameObject fruit = Instantiate(appleReference, new Vector3(Random.Range(10, 30), Random.Range(-25, -35), -32), Quaternion.identity) as GameObject; fruit.rigidbody.AddForce(throwForce, ForceMode.Impulse);  

C'est la complète FruitSpawner classe.

utiliser UnityEngine; using System.Collections; public class FruitSpawner: MonoBehaviour [SerializeField] private GameObject appleReference; privé Vector3 throwForce = nouveau Vector3 (0, 18, 0); void Start () InvokeRepeating ("SpawnFruit", 0.5f, 6);  void SpawnFruit () pour (octet i = 0; i < 4; i++)  GameObject fruit = Instantiate(appleReference, new Vector3(Random.Range(10, 30), Random.Range(-25, -35), -32), Quaternion.identity) as GameObject; fruit.rigidbody.AddForce(throwForce, ForceMode.Impulse);   

15. Commandes tactiles

Implémentons maintenant les commandes tactiles. Le joueur pourra utiliser l'écran tactile pour couper les fruits. Nous allons visualiser cela en traçant une ligne à l'aide du LineRenderer classe, puis en vérifiant si le fruit entre en collision avec le geste du joueur.

Étape 1: Déclarer des variables

Nous commençons par créer des variables.

  • c1, c2: ces variables définissent la couleur de la ligne
  • lineGO: cet objet de jeu tiendra le rendu de ligne
  • lineRenderer: l'instance de rendu de ligne
  • je: une valeur int utilisée pour définir la taille et l'index de la ligne
public Color c1 = Color.yellow; public Color c2 = Color.red; lineGO privé; private LineRenderer lineRenderer; int privée i = 0;

Étape 2: Configuration

dans le Début méthode, nous définissons les objets et propriétés nécessaires pour la ligne. Nous commençons par créer un nouveau GameObject instance contenant le LineRenderer. Nous utilisons ensuite certaines des méthodes de rendu de ligne pour définir l'apparence.

void Start () lineGO = new GameObject ("Line"); lineGO.AddComponent(); lineRenderer = lineGO.GetComponent(); lineRenderer.material = new Material (Shader.Find ("Mobile / Particles / Additive")); lineRenderer.SetColors (c1, c2); lineRenderer.SetWidth (0.3F, 0); lineRenderer.SetVertexCount (0); 

La plupart des propriétés définies dans ce bloc de code sont faciles à comprendre., SetColor change la couleur de la ligne et SetWidth définit sa largeur. Portez une attention particulière à la SetVertexCount ligne. Cette méthode spécifie le nombre de points de la ligne. En appelant cette méthode avec un nombre de points plus élevé, nous pouvons augmenter la taille de la ligne. Cela deviendra plus clair dans la prochaine étape.

Étape 3: Créer une ligne

La ligne est créée dans le Mettre à jour méthode. Nous testons d’abord si le joueur touche l’écran en récupérant le touchCount propriété du Contribution classe. Si la propriété est supérieure à 0, cela signifie qu'il y a au moins un doigt sur l'écran de l'appareil.

Nous gardons une référence à la Toucher objet pour un accès plus facile et vérifier quelle phase il est actuellement. Nous en avons besoin pour être dans le Déplacé phase pour pouvoir créer la ligne.

Si le joueur bouge son doigt sur l’écran, nous pouvons commencer à créer un segment de ligne à cette position. Nous invoquons le SetVertexCount Méthode à nouveau pour augmenter le nombre maximum de segments de la ligne.

void Update () if (Input.touchCount> 0) tactile tactile = Entrée.GetTouch (0); if (touch.phase == TouchPhase.Moved) lineRenderer.SetVertexCount (i + 1); Vector3 mPosition = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 15); lineRenderer.SetPosition (i, Camera.main.ScreenToWorldPoint (mPosition)); i ++;  

Étape 4: Ajouter des collisionneurs

Avec la ligne en place, nous y ajoutons un collisionneur pour nous aider à détecter une collision avec l'un des fruits. L’extrait de code suivant crée et ajoute un collider de boîte à la ligne à l’aide de la touche AddComponent méthode et définit sa position à la lineRendererla position actuelle de. La dernière ligne de code modifie la taille par défaut du collisionneur pour correspondre à la taille de la ligne.

BoxCollider bc = lineGO.AddComponent(); bc.transform.position = lineRenderer.transform.position; bc.size = nouveau vecteur3 (0,1f, 0,1f, 0,1f);

Étape 5: Supprimer la ligne

Nous supprimons la ligne lorsque le joueur ne touche plus l'écran. Cela évite les collisions indésirables avec les pommes.

Dans le prochain extrait de code, nous vérifions si la phase en cours de la Toucher objet est Terminé et définir le nombre de sommets du lineRenderer à 0. Cela supprimera les segments de ligne actuels, mais ne détruira pas l'objet, ce qui nous permettra de le réutiliser ultérieurement. Nous avons également réinitialisé le je variable pour permettre une utilisation ultérieure.

if (touch.phase == TouchPhase.Ended) / * Supprimer la ligne * / lineRenderer.SetVertexCount (0); i = 0; 

Étape 6: Détruire les collisionneurs

Une fois la ligne supprimée, nous n’avons plus besoin des collisionneurs de boîtes qui s’y rattachent. Nous créons d’abord un tableau de BoxCollider objets, stockant les collisionneurs de boîte de l'objet de jeu en ligne. Nous passons ensuite en boucle sur le tableau, détruisant chaque collisionneur de boîtes.

/ * Supprimer les collisionneurs de ligne * / BoxCollider [] lineColliders = lineGO.GetComponents(); foreach (BoxCollider b dans lineColliders) Destroy (b); 

Jetons un coup d'oeil à la mise en œuvre complète de la LinesHandler classe.

utiliser UnityEngine; using System.Collections; public class LinesHandler: MonoBehaviour public Couleur c1 = Color.yellow; public Color c2 = Color.red; lineGO privé; private LineRenderer lineRenderer; int privée i = 0; void Start () lineGO = new GameObject ("Line"); lineGO.AddComponent(); lineRenderer = lineGO.GetComponent(); lineRenderer.material = new Material (Shader.Find ("Mobile / Particles / Additive")); lineRenderer.SetColors (c1, c2); lineRenderer.SetWidth (0.3F, 0); lineRenderer.SetVertexCount (0);  void Update () if (Input.touchCount> 0) tactile tactile = Input.GetTouch (0); if (touch.phase == TouchPhase.Moved) lineRenderer.SetVertexCount (i + 1); Vector3 mPosition = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 15); lineRenderer.SetPosition (i, Camera.main.ScreenToWorldPoint (mPosition)); i ++; / * Add Collider * / BoxCollider bc = lineGO.AddComponent(); bc.transform.position = lineRenderer.transform.position; bc.size = nouveau vecteur3 (0,1f, 0,1f, 0,1f);  if (touch.phase == TouchPhase.Ended) / * Supprimer l