In deze tutorial leer je hoe je een mobiel 3D-spel maakt met C # en Unity. Het doel van het spel is om het fruit dat op het podium verschijnt te snijden met behulp van het aanraakscherm.
In deze tutorial leer je over de volgende aspecten van Unity-game-ontwikkeling:
De gebruikersinterface van het spel is eenvoudig. De onderstaande schermafbeelding geeft u een idee van de illustraties die we gaan gebruiken en hoe de uiteindelijke gebruikersinterface eruit zal zien. Je vindt de illustraties en extra bronnen in de bronbestanden van de zelfstudie op GitHub.
Open Unity en selecteer Nieuw project van de het dossier menu om het nieuwe projectdialoogvenster te openen. Vertel Unity waar u het project wilt opslaan en stel het inStandaardinstellingen instellen voor: menu naar 3D.
In de volgende stap krijgt u de gebruikersinterface van Unity te zien. Stel het project in voor mobiele ontwikkeling door te kiezen Bouw instellingen van de het dossier menu en het selecteren van uw platform naar keuze.
Het eerste dat we moeten doen nadat we het doelplatform hebben geselecteerd, is het kiezen van de grootte van de illustraties die we in het spel zullen gebruiken. Dit zal ons helpen een juiste grootte voor de 3D-texturen en 2D GUI te selecteren zonder de illustratie wazig te maken of texturen te gebruiken die te groot zijn voor het doelapparaat. De illustratie moet bijvoorbeeld een hogere resolutie hebben als u een iPad target met een retina-display dan een Lumia 520.
Omdat Android een open platform is, is er een breed scala aan apparaten, schermresoluties en pixeldichtheid. Een paar van de meest voorkomende staan hieronder vermeld.
Houd er rekening mee dat de code die we in deze zelfstudie schrijven, kan worden gebruikt om een van de platforms te targeten.
Afhankelijk van de apparaten die u target, moet u de illustratie mogelijk converteren naar de aanbevolen grootte en pixeldichtheid. U kunt dit doen in uw favoriete foto-editor. Ik heb de Grootte aanpassen ... functie onder de Hulpmiddelen menu in OS X's Voorbeeld toepassing.
Voordat we aan de slag gaan, zorgt u ervoor dat de 2D knop in de Tafereel paneel is niet gemarkeerd. U kunt ook de resolutie wijzigen die wordt weergegeven in de Spel paneel.
Vervolgens krijg je de werkruimtepanelen te zien die we ook in deze zelfstudie zullen gebruiken. Neem even de tijd om naar de belangrijkste interfacepanelen te kijken, zoals de Tafereel, Spel, Hiërarchie, project, Middelen, en Inspecteur. We zullen ze vaak gebruiken in deze tutorial.
U kunt een van de drie programmeertalen gebruiken wanneer u Unity gebruikt, C #, UnityScript, een variatie van JavaScript, en boe. Elke programmeertaal heeft zijn voors en tegens, en het is aan jou om te beslissen welke je voorkeur heeft. Mijn persoonlijke voorkeur gaat naar de programmeertaal C #, dus dat is de taal die ik in deze zelfstudie zal gebruiken.
Als u besluit een andere programmeertaal te gebruiken, moet u de voorbeelden van Unity's Script Reference raadplegen.
Ik zal een aantal geluiden gebruiken om de audiale ervaring van het spel te verbeteren. De geluidseffecten die in deze zelfstudie worden gebruikt, zijn verkregen van PlayOnLoop en Freesound.
Om het spel te maken, moeten we eerst een paar 3D-modellen kopen. Ik raad 3docean aan voor modellen en texturen van hoge kwaliteit, maar als je aan het testen of leren bent, zullen gratis modellen net zo goed werken. De modellen in deze zelfstudie zijn gedownload vanuit SketchUp 3D Warehouse, waar u een breed scala aan 3D-modellen kunt vinden.
Omdat Unity het SketchUp-bestandsformaat niet herkent, moeten we het converteren naar iets dat Unity kan importeren. We moeten eerst de gratis versie van SketchUp downloaden, genaamd SketchUp Make.
Open het 3D-model in SketchUp Make, selecteer Exporteren> 3D-model van de het dossier menu en kies Collada (* .dae). Kies een naam en locatie en klik op Opslaan. Hiermee wordt een bestand en een map voor het 3D-model gemaakt. Het bestand bevat de gegevens voor het 3D-object terwijl de map de texturen van het model bevat. In de volgende stap zullen we het model in Unity importeren.
Voordat we beginnen met coderen, moeten we de items aan het Unity-project toevoegen. U kunt dit op verschillende manieren doen:
Nadat u deze stap hebt voltooid, ziet u de items in uw project Middelen map in de project paneel.
In deze stap plaatsen we de hoofdcamera om de gewenste weergave te creëren. Selecteer de hoofdcamera van de Hiërarchie paneel en pas de Transformeren waarden in de Inspecteur om overeen te komen met degene die hieronder worden getoond.
Maak je geen zorgen als je geen wijzigingen ziet. We hebben nog niets gemaakt voor de camera om te zien.
Om onze objecten zichtbaar te maken in de 3D-wereld, moeten we licht toevoegen aan de scène. kiezen Maak een ander van de GameObject menu en selecteer Directional Light. Hiermee wordt een object gemaakt dat een lichtstraal produceert. Verander zijn Transformeren waarden zoals weergegeven in de volgende schermafbeelding om het de scène te laten verlichten.
Het licht moet zichtbaar zijn op de scène zoals weergegeven in de volgende schermafbeelding.
We gebruiken een sprite textuur als onze achtergrond. Standaard worden afbeeldingen geïmporteerd naar de Middelen map worden geconverteerd naar structuur instanties die kunnen worden toegepast op 3D-objecten. We moeten deze veranderen structuur instances Sprite-textuur exemplaren voor de afbeelding die we als achtergrond willen gebruiken.
Selecteer de afbeelding die u wilt converteren in de Middelen paneel en open de Inspecteur. kiezen sprite van de Textuurtype menu.
Sleep de achtergrond naar de Hiërarchie paneel. Het zou automatisch moeten verschijnen in de Tafereel paneel. Pas de .... aan Transformeren waarden in de Inspecteur zoals getoond in de volgende screenshot.
Om de score van de game weer te geven, gebruiken we Unity's GUI-tekst en een geïmporteerd 3D-model.
Selecteer het geïmporteerde 3D-model van uw keuze uit de Middelen paneel en sleep het naar de Tafereel. Ik ga een appelmodel gebruiken. Pas de .... aan Transformeren waarden in de Inspecteur om overeen te komen met degene die hieronder worden getoond.
Hierdoor wordt de appel links bovenaan het scherm geplaatst.
Samen met het Apple-model geven we een nummer weer dat de score van de speler aangeeft. Dit is het aantal vruchten dat de speler heeft gesneden.
kiezen Maak anders> GUI-tekst van de GameObject menu om een tekstobject te maken, plaats dit rechts van het Apple-model en verander de tekst in het Inspecteur paneel naar 0.
U kunt een aangepast lettertype insluiten door het in de. Te importeren Middelen map en het wijzigen van de doopvont eigendom van de tekst in de Inspecteur.
We gebruiken een timer om aan te geven wanneer het spel afgelopen is. Het is samengesteld uit een GUI-structuur een pictogram en een toont GUI-tekst de resterende tijd weergeven.
Om het klokpictogram toe te voegen, selecteert u de afbeelding die u wilt gebruiken in de Middelen paneel en open de Inspecteur. kiezen GUI van de Textuurtype menu om het naar een GUI-structuur om te zetten. Sleep de afbeelding naar de Tafereel en verander de transformatiewaarden in de waarden die hieronder worden getoond.
De scène zou er nu zo uit moeten zien.
Herhaal de stappen voor het toevoegen van de scoretekst om de timertekst toe te voegen. Vergeet niet om de tekst op de juiste tijd in te stellen.
De waarschuwing is a GUI-structuur die we laten zien wanneer de timer bereikt 0. Het toont een game-over-bericht in het midden van het scherm.
Om de waarschuwing te maken, converteert u uw waarschuwingsafbeelding naar a GUI-structuur de ... gebruiken Inspecteur. Sleep het van de Hiërarchie paneel naar de Middelen paneel om het naar een te converteren prefab.
timer
KlasseLaten we nu het timer
klasse. Selecteer de Time GUI-tekst, Klik op de Component toevoegen knop in de Inspecteur paneel en kies Nieuw script. Geef het script een naam timer en vergeet niet om de taal in C # te veranderen. Open het nieuw gemaakte bestand en volg de volgende stappen.
We beginnen met het maken van een aantal variabelen die we zullen gebruiken in de timer
klasse.
privé GUIText tijd TF; openbare GameObject alertReference
Laten we eens naar elk van de variabelen kijken.
timeTF
: een verwijzing naar de Time GUI-tekstalertReference
: een verwijzing naar het prefab alarmWe gebruiken deze verwijzingen om toegang te krijgen tot de tijd en alarmgame-objecten en hun waarden te wijzigen. Stel de alert prefab in de Inspecteur.
Wanneer de variabelen zijn gedeclareerd, stellen we de timeTF
waarde door toegang te krijgen tot de guiText
eigenschap van het huidige spelobject. Hiermee kunnen we de tekstwaarde later wijzigen.
We noemen ook de InvokeRepeating
methode, die het ReduceTime
methode elke seconde.
void Start () timeTF = gameObject.guiText; InvokeRepeating ("ReduceTime", 1, 1);
ReduceTime
De ReduceTime
methode is verantwoordelijk voor het bijwerken van de timertekst en het weergeven van het waarschuwingsbericht. Het spel is afgelopen als de tijd aanbreekt 0. Voeg het volgende codeblok toe aan de timer
klasse.
void ReduceTime () if (timeTF.text == "1") / * Alert * / Time.timeScale = 0; Instantiëren (alertReference, nieuwe Vector3 (0.5f, 0.5f, 0), transform.rotation); audio.Play (); GameObject.Find ( "AppleGUI"). GetComponent().Hou op(); timeTF.text = (int.Parse (timeTF.text) - 1) .ToString ();
We beginnen met testen of de tijd bijna voorbij is. Als waar
, we pauzeren het spel door het veranderen van de tijdschaal
eigendom aan 0, maak een instantie van de waarschuwing en speel de game over geluid.
Als de tijd nog niet voorbij is, verlagen we eenvoudig de waarde met 1. Om dit te doen, gebruiken we de int.Parse
methode om de tijdreeks naar een getal te converteren, af te trekken 1, en bel ToString
erop om het resultaat terug naar een string te converteren.
vernieuwen
MethodeDit is het laatste deel van de timer
klasse. In de vernieuwen
methode, we bellen LoadLevel
op de Toepassing
klasse en herlaad het huidige niveau, waarbij elk object en elke variabele opnieuw wordt ingesteld naar de oorspronkelijke status.
void Reload () Application.LoadLevel (Application.loadedLevel);
Dit is hoe de complete klas eruit zou moeten zien als hij klaar is.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Timer: MonoBehaviour private GUIText timeTF; openbare GameObject alertReference; void Start () timeTF = gameObject.guiText; InvokeRepeating ("ReduceTime", 1, 1); void ReduceTime () if (timeTF.text == "1") / * Alert * / Time.timeScale = 0; Instantiëren (alertReference, nieuwe Vector3 (0.5f, 0.5f, 0), transform.rotation); audio.Play (); GameObject.Find ( "AppleGUI"). GetComponent().Hou op(); timeTF.text = (int.Parse (timeTF.text) - 1) .ToString (); void Reload () Application.LoadLevel (Application.loadedLevel);
De appel is een van de belangrijkste elementen van het spel en het is een van de interactieve objecten van het scherm. De speler kan het aanraakscherm van het apparaat gebruiken om de appel te snijden, waardoor de score wordt verhoogd.
Sleep de appel van de Middelen paneel naar de Tafereel. Maak je geen zorgen over zijn positie, want we zullen het omzetten naar een prefab in een oogwenk en verwijder het van de Hiërarchie.
Om een botsing met de appel te detecteren, moeten we een star lichaam ernaar toe. Selecteer om een toe te voegen Component toevoegen van de Inspecteur paneel en kies Physics> star lichaam. U kunt de instellingen op hun standaardwaarden laten staan.
We moeten ook een box-collider aan de appel toevoegen om botsingen te detecteren. Deze collider bepaalt het hitgebied van de appel. Klik op de Component toevoegen knop in de Inspecteur paneel, kies Natuurkunde> Box Collider, en verander de waarden zoals getoond in de onderstaande schermafbeelding.
In de Tafereel paneel, zou er een groene doos rond de appel moeten verschijnen, die de vakman die we zojuist hebben toegevoegd vertegenwoordigt.
Het splash prefab zal worden gebruikt als een visueel effect wanneer het fruit door de speler wordt gesneden. Het verschijnt op het podium voor elk fruit dat de speler snijdt en verdwijnt langzaam na verloop van tijd. Converteer de afbeelding naar een sprite zoals eerder beschreven en voeg het toe aan de Tafereel.
Voeg een script toe en sleep het terug naar de Middelen paneel om een te maken prefab. Open de nieuw gemaakte klasse.
Plons
KlasseDe Plons
class verwerkt de afbeeldingen die worden gemaakt wanneer het fruit wordt gesneden.
Deze variabelen worden gebruikt om een alpha-waarde voor het plonsprefab te berekenen en in te stellen. Door de alpha-eigenschap te wijzigen, kunnen we de prefab vervagen naarmate de tijd verstrijkt.
privé Kleur randomAlpha; privé float currentAlpha;
In deze methode berekenen we een willekeurige alpha-waarde uit 0.3 naar 0.5 en sla die waarde op in de randomAlpha
variabel. Vervolgens stellen we de resulterende alpha in op de kleur
eigendom van het spelobject.
In de laatste coderegel roepen we de methode aan die die waarde elke zal verlagen 300 milliseconden, waardoor een vervagend effect ontstaat.
void Start () randomAlpha = new Color (1, 1, 1, Random.Range (0.3f, 0.5f)); gameObject.renderer.material.color = randomAlpha; InvokeRepeating ("ReduceAlpha", 0.3f, 0.3f);
Om de alfa te verminderen, moeten we eerst de huidige waarde verkrijgen. De currentAlpha
variabele slaat deze waarde op. We trekken dan af 0.1 van die waarde en wijs de nieuwe alpha opnieuw toe aan het spelobject. De afbeelding wordt verwijderd wanneer deze bijna onzichtbaar is.
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);
Dit is wat de Plons
klasse ziet eruit als.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class Splash: MonoBehaviour private Color randomAlpha; privé float currentAlpha; void Start () randomAlpha = new Color (1, 1, 1, Random.Range (0.3f, 0.5f)); gameObject.renderer.material.color = randomAlpha; InvokeRepeating ("ReduceAlpha", 0.3f, 0.3f); 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);
appel
KlasseMet onze plons prefab gemaakt, kunnen we nu verder gaan met de appel
klasse. Deze klasse handelt acties af, zoals botsingdetectie, het bijwerken van de score en het verwijderen van de appel uit de scène.
Drie variabelen worden gedeclareerd in de appel
klasse:
splashReference
: verwijzing naar het splash prefabrandomPos
: positie voor de splash prefabscoreReference
: verwijzing naar de GUI-tekst van de score[SerializeField] private GameObject splashReference; private Vector3 randomPos = new Vector3 (Random.Range (-1, 1), Random.Range (0.3f, 0.7f), Random.Range (-6.5f, -7.5f)); privé GUIText-scoreReference;
Om een verwijzing naar de scoretekst te krijgen, gebruiken we de Vind
methode. Deze methode doorzoekt de actieve game-objecten en retourneert het object waarnaar we zoeken, de score GUI-tekst in dit geval.
void Start () scoreReference = GameObject.Find ("Score"). guiText;
Met de scoreReference
variabele set, we kunnen nu de waarde ervan verhogen wanneer een fruit wordt gesneden.
In de Bijwerken
methode, controleren we of het fruit niet langer zichtbaar is op het scherm door het te openen Y
positie en verwijderen als waar
. Dit helpt ons geheugen vrij te maken door ongebruikte game-objecten te vernietigen.
void Update () / * Fruit verwijderen indien niet zichtbaar * / if (gameObject.transform.position.y < -36) Destroy(gameObject);
De volgende code gebruikt de OnCollisionEnter
methode om te detecteren wanneer het fruit door de speler wordt gesneden. Wanneer dit gebeurt, spelen we het afgeknipte geluid en verwijderen we het fruit. Vervolgens maken we een nieuw exemplaar van de splash prefab en werken we de score bij.
void OnCollisionEnter (Collision anders) if (other.gameObject.name == "Line") Camera.main.GetComponent().Spelen(); Vernietigen (gameObject); Instantiëren (splashReference, randomPos, transform.rotation); / * Update Score * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString ();
Dit is wat de complete appel
klasse ziet eruit als.
gebruikmakend van UnityEngine; met behulp van System.Collections; publieke klasse Apple: MonoBehaviour [SerializeField] private GameObject splashReference; private Vector3 randomPos = new Vector3 (Random.Range (-1, 1), Random.Range (0.3f, 0.7f), Random.Range (-6.5f, -7.5f)); privé GUIText-scoreReference; void Start () scoreReference = GameObject.Find ("Score"). guiText; void Update () / * Fruit verwijderen indien niet zichtbaar * / if (gameObject.transform.position.y < -36) Destroy(gameObject); void OnCollisionEnter(Collision other) if(other.gameObject.name == "Line") Camera.main.GetComponent().Spelen(); Vernietigen (gameObject); Instantiëren (splashReference, randomPos, transform.rotation); / * Update Score * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString ();
FruitSpawner
KlasseDe FruitSpawner
klas instantiseert en verplaatst de vruchten naar de scène. Het is bevestigd aan de hoofdcamera.
Dit zijn de variabelen die in deze klasse zijn gedeclareerd.
[SerializeField] private GameObject appleReference; private Vector3 throwForce = new Vector3 (0, 18, 0);
appleReference
: verwijzing naar het appelprefabthrowForce
: de kracht die wordt gebruikt om de vruchten naar boven te duwenIn de volgende coderegels noemen we de InvokeRepeating
methode om het SpawnFruit
methode elke zes seconden. Dit zal om de zes seconden nieuw fruit toevoegen aan de scène, waardoor de speler de tijd krijgt om ze te snijden voordat de vrucht naar de bodem van de scène valt.
void Start () InvokeRepeating ("SpawnFruit", 0.5f, 6);
SpawnFruit
MethodeDe SpawnFruit
methode maakt de vruchten en duwt ze naar boven voor de speler om te snijden. We gebruiken een voor
verklaring om de vruchten te instantiëren, plaats ze willekeurig ter plaatse en pas een natuurkundige kracht toe met behulp van de addForce
methode.
void SpawnFruit () for (byte 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);
Dit is het complete FruitSpawner
klasse.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class FruitSpawner: MonoBehaviour [SerializeField] private GameObject appleReference; private Vector3 throwForce = new Vector3 (0, 18, 0); void Start () InvokeRepeating ("SpawnFruit", 0.5f, 6); void SpawnFruit () for (byte 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);
Laten we nu de aanraakbedieningen implementeren. De speler kan het aanraakscherm gebruiken om de vruchten te snijden. We visualiseren dit door een lijn te tekenen met behulp van de LineRenderer
klasse en controleer vervolgens of de vrucht in botsing komt met het uithaalgedrag van de speler.
We beginnen met het maken van enkele variabelen.
c1, c2
: deze variabelen stellen de kleur van de lijn inlineGO
: dit spelobject houdt de regelrenderer vastlineRenderer
: de instantie van de regelrendererik
: een int-waarde die wordt gebruikt om de grootte en index van de regel in te stellenopenbare kleur c1 = Color.yellow; openbare kleur c2 = Color.red; privé GameObject-regelGO; privé LineRenderer lineRenderer; privé int i = 0;
In de Begin
methode, stellen we de benodigde objecten en eigenschappen voor de regel in. We beginnen met het maken van een nieuwe GameObject
bijvoorbeeld met de LineRenderer
. Vervolgens gebruiken we enkele van de line-renderermethoden om de manier in te stellen waarop deze eruit gaat zien.
void Start () lineGO = nieuw GameObject ("Line"); lineGO.AddComponent(); lineRenderer = lineGO.GetComponent (); lineRenderer.material = nieuw materiaal (Shader.Find ("Mobile / Particles / Additive")); lineRenderer.SetColors (c1, c2); lineRenderer.SetWidth (0.3F, 0); lineRenderer.SetVertexCount (0);
De meeste eigenschappen die in dit codeblok zijn ingesteld, zijn gemakkelijk te begrijpen, SetColor
wijzigt de kleur van de lijn en SetWidth
stelt de breedte in. Besteed speciale aandacht aan de SetVertexCount
lijn. Deze methode specificeert het aantal punten van de lijn. Door deze methode met een hoger aantal punten te gebruiken, kunnen we de grootte van de lijn vergroten. Dit zal in de volgende stap duidelijker worden.
De regel is gemaakt in de Bijwerken
methode. We testen eerst of de speler het scherm aanraakt door de touchCount
eigendom van de Invoer
klasse. Als de eigenschap groter is dat 0, het betekent dat er ten minste één vinger op het scherm van het apparaat staat.
We houden een verwijzing naar de aanraken
object om de toegang te vergemakkelijken en te controleren in welke fase het zich momenteel bevindt. We hebben het nodig om in de Verhuisd
fase om de lijn te kunnen maken.
Als de speler met zijn vinger over het scherm beweegt, kunnen we beginnen met het creëren van een lijnsegment op die positie. We roepen het SetVertexCount
methode opnieuw om het maximale aantal segmenten van de lijn te vergroten.
void Update () if (Input.touchCount> 0) Touch touch = 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 ++;
Met de lijn op zijn plaats voegen we er een collider aan toe om een botsing met een van de vruchten te detecteren. Het volgende codefragment maakt en voegt een vak-collider toe aan de regel met behulp van de AddComponent
methode en stelt zijn positie in op de lineRenderer
huidige positie. De laatste regel code wijzigt de standaardgrootte van de collider zodat deze overeenkomt met de maat van de lijn.
BoxCollider bc = lineGO.AddComponent(); bc.transform.position = lineRenderer.transform.position; bc.size = new Vector3 (0.1f, 0.1f, 0.1f);
We verwijderen de lijn wanneer de speler niet langer het scherm aanraakt. Dit voorkomt ongewenste botsingen met de appels.
In het volgende codefragment controleren we of de huidige fase van de aanraken
object is Ended
en stel de vertex-telling van de lineRenderer
naar 0. Hiermee worden de huidige lijnsegmenten verwijderd, maar het object wordt niet vernietigd, waardoor we het later opnieuw kunnen gebruiken. We hebben ook de ik
variabele om later gebruik toe te staan.
if (touch.phase == TouchPhase.Ended) / * Remove Line * / lineRenderer.SetVertexCount (0); i = 0;
Als de lijn eenmaal is verwijderd, hebben we niet langer de vakvervalsers nodig die eraan vastzitten. We maken eerst een array van BoxCollider
objecten, die de vakverdikkers van het lijnspelobject opslaan. We lopen dan over de array heen en vernietigen elke box-collider.
/ * Remove Line Colliders * / BoxCollider [] lineColliders = lineGO.GetComponents(); foreach (BoxCollider b in lineColliders) Destroy (b);
Laten we eens kijken naar de volledige implementatie van de LinesHandler
klasse.
gebruikmakend van UnityEngine; met behulp van System.Collections; public class LinesHandler: MonoBehaviour openbare kleur c1 = Color.yellow; openbare kleur c2 = Color.red; privé GameObject-regelGO; privé LineRenderer lineRenderer; privé int i = 0; void Start () lineGO = nieuw GameObject ("Line"); lineGO.AddComponent(); lineRenderer = lineGO.GetComponent (); lineRenderer.material = nieuw materiaal (Shader.Find ("Mobile / Particles / Additive")); lineRenderer.SetColors (c1, c2); lineRenderer.SetWidth (0.3F, 0); lineRenderer.SetVertexCount (0); void Update () if (Input.touchCount> 0) Touch touch = 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 ++; / * Collider * / BoxCollider bc = lineGO.AddComponent toevoegen (); bc.transform.position = lineRenderer.transform.position; bc.size = new Vector3 (0.1f, 0.1f, 0.1f); if (touch.phase == TouchPhase.Ended) / * Remove Line * / lineRenderer.SetVertexCount (0); i = 0; / * Remove Line Colliders * / BoxCollider [] lineColliders = lineGO.GetComponents (); foreach (BoxCollider b in lineColliders) Destroy (b);
Het is tijd om de game te testen. druk op Command-P om het spel in Unity te spelen. Als alles naar behoren werkt, bent u klaar voor de laatste stappen.
Als je tevreden bent met je spel, is het tijd om te selecteren Bouw instellingen van de het dossier menu en klik op de Speler instellingen knop. Dit zou de Speler instellingen in de Inspecteur paneel waar u de p