Maak een Fruit Ninja geïnspireerd spel met eenheid

Wat je gaat creëren

Invoering

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:

  • 3D-modellen importeren
  • veeg gebaren
  • regelweergave
  • natuurkundige krachten
  • 2D-sprites

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.

1. Projectinstelling

Stap 1: maak een nieuw eenheidsproject

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.

Stap 2: Bouwinstellingen configureren

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.

Stap 3: Kunstwerk

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.

iOS

  • iPad zonder Retina: 1024 px x 768 px
  • iPad met Retina: 2048 px x 1536 px
  • 3.5 "iPhone / iPod Touch zonder Retina: 320 px x 480 px
  • 3.5 "iPhone / iPod met Retina: 960 px x 640 px
  • 4 "iPhone / iPod Touch: 1136 px x 640 px

Android

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.

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

Windows Phone & BlackBerry

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

Houd er rekening mee dat de code die we in deze zelfstudie schrijven, kan worden gebruikt om een ​​van de platforms te targeten.

Stap 4: grafische afbeeldingen exporteren

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.

Stap 5: Configureer de gebruikersinterface van Unity

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 TafereelSpel, Hiërarchie, project, Middelen, en Inspecteur. We zullen ze vaak gebruiken in deze tutorial.

Stap 6: Taal programmeren

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.

2. Middelen

Geluidseffecten

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.

3D-modellen

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.

3. Activa importeren

Voordat we beginnen met coderen, moeten we de items aan het Unity-project toevoegen. U kunt dit op verschillende manieren doen:

  • kiezen Nieuwe activa importeren van de Middelen menu
  • sleep de activa in het projectvenster
  • voeg de items toe aan de map met items van het project

Nadat u deze stap hebt voltooid, ziet u de items in uw project Middelen map in de project paneel.

4. Camera & Verlichting instellen

Stap 1: De camera instellen

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.

Stap 2: Het licht opzetten

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.

5. Achtergrond toevoegen

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.

6. Creëer de Score-GUI

Om de score van de game weer te geven, gebruiken we Unity's GUI-tekst en een geïmporteerd 3D-model.

Stap 1: Het Apple-model toevoegen

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.

Stap 2: De GUI-tekst toevoegen

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.

7. Maak de grafische gebruikersinterface

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.

Stap 1: Het klokpictogram toevoegen

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.

Stap 2: De GUI-tekst toevoegen

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.

8. Alert Prefab

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.

9. timer Klasse

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

Stap 1: Variabelen declareren

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-tekst
  • alertReference: een verwijzing naar het prefab alarm

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

Stap 2: instellen

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); 

Stap 3: Implementeer 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.

Stap 4: vernieuwen Methode

Dit 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); 

10. Apple Prefab

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.

Stap 1: voeg Rigidbody toe

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.

Stap 2: voeg Box Collider toe

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.

11. Splash Prefab

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.

12. Plons Klasse

De Plons class verwerkt de afbeeldingen die worden gemaakt wanneer het fruit wordt gesneden.

Stap 1: Variabelen declareren

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;

Stap 2: instellen

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); 

Stap 3: Alpha verminderen en vernietigen

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);    

13. appel Klasse

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

Stap 1: Variabelen declareren

Drie variabelen worden gedeclareerd in de appel klasse:

  • splashReference: verwijzing naar het splash prefab
  • randomPos: positie voor de splash prefab
  • scoreReference: 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;

Stap 2: Score-referentie ophalen

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.

Stap 3: Vernietig als je buiten het toneel bent

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);  

Stap 4: Botsingen verwerken

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 (); 

14. FruitSpawner Klasse

De FruitSpawner klas instantiseert en verplaatst de vruchten naar de scène. Het is bevestigd aan de hoofdcamera.

Stap 1: Variabelen declareren

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 appelprefab
  • throwForce: de kracht die wordt gebruikt om de vruchten naar boven te duwen

Stap 2: oproep aanroepen

In 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); 

Stap 3: SpawnFruit Methode

De 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);   

15. Aanraakbedieningen

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.

Stap 1: Variabelen declareren

We beginnen met het maken van enkele variabelen.

  • c1, c2: deze variabelen stellen de kleur van de lijn in
  • lineGO: dit spelobject houdt de regelrenderer vast
  • lineRenderer: de instantie van de regelrenderer
  • ik: een int-waarde die wordt gebruikt om de grootte en index van de regel in te stellen
openbare kleur c1 = Color.yellow; openbare kleur c2 = Color.red; privé GameObject-regelGO; privé LineRenderer lineRenderer; privé int i = 0;

Stap 2: instellen

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.

Stap 3: Maak een lijn

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 ++;  

Stap 4: Colliders toevoegen

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 lineRendererhuidige 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);

Stap 5: Verwijder lijn

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; 

Stap 6: Colliders vernietigen

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); 

16. Laatste stappen

Stap 1: Testen

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.

Stap 2: Spelerinstellingen

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