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:
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..
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.
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ène, Jeu, Hiérarchie, Projet, Les atouts, et Inspecteur. Nous les utiliserons fréquemment dans ce tutoriel.
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 tutoriel ont été obtenus à partir de PlayOnLoop et Freesound.
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..
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.
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.
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..
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.
Pour afficher le score du jeu, nous utiliserons celui de Unity. Texte de l'interface graphique et un modèle 3D importé.
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.
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.
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.
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.
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.
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é.
Minuteur
ClasseMettons 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.
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'heurealertRéférence
: une référence au prefab d'alerteNous 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.
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);
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.
Recharger
MéthodeCeci 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);
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.
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.
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.
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.
Éclaboussure
Classele Éclaboussure
la classe gère les images créées lorsque le fruit est coupé en tranches.
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;
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);
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);
Pomme
ClasseAvec 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..
Trois variables sont déclarées dans la Pomme
classe:
splashReference
: référence au préfabriqué splashrandomPos
: position pour le préfabriqué splashscoreRé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;
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.
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);
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 ();
FruitSpawner
Classele FruitSpawner
La classe instancie et déplace les fruits vers la scène. Il est attaché à la caméra principale.
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é pommethrowForce
: la force utilisée pour pousser les fruits vers le hautDans 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);
SpawnFruit
Méthodele 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);
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.
Nous commençons par créer des variables.
c1, c2
: ces variables définissent la couleur de la lignelineGO
: cet objet de jeu tiendra le rendu de lignelineRenderer
: l'instance de rendu de ligneje
: une valeur int utilisée pour définir la taille et l'index de la lignepublic Color c1 = Color.yellow; public Color c2 = Color.red; lineGO privé; private LineRenderer lineRenderer; int privée i = 0;
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.
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 ++;
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 lineRenderer
la 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);
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;
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