Erstellen Sie ein mit Frucht Ninja inspiriertes Spiel mit Unity

Was Sie erstellen werden

Einführung

In diesem Lernprogramm erfahren Sie, wie Sie ein mobiles 3D-Spiel mit C # und Unity erstellen. Das Ziel des Spiels ist es, die Früchte, die auf der Bühne erscheinen, mithilfe des Touchscreens zu schneiden.

In diesem Lernprogramm erfahren Sie mehr über die folgenden Aspekte der Entwicklung von Unity-Spielen:

  • 3D-Modelle importieren
  • Wischgesten
  • Linienrenderer
  • Physikkräfte
  • 2D-Sprites

Die Benutzeroberfläche des Spiels ist unkompliziert. Der folgende Screenshot gibt Ihnen einen Überblick über das von uns verwendete Bildmaterial und wie die endgültige Benutzeroberfläche aussieht. Sie finden das Artwork und zusätzliche Ressourcen in den Quelldateien des Tutorials auf GitHub.

1. Projekteinrichtung

Schritt 1: Erstellen Sie ein neues Unity-Projekt

Öffnen Sie Unity und wählen Sie Neues Projekt von dem Datei Menü, um den neuen Projektdialog zu öffnen. Teilen Sie Unity mit, wo Sie das Projekt speichern möchten, und legen Sie das festRichten Sie die Standardeinstellungen für Folgendes ein: Menü zu 3D.

Schritt 2: Konfigurieren Sie die Build-Einstellungen

Im nächsten Schritt wird die Benutzeroberfläche von Unity angezeigt. Richten Sie das Projekt für die mobile Entwicklung ein, indem Sie wählen Einstellungen erstellen von dem Datei Menü und wählen Sie Ihre Plattform Ihrer Wahl.

Schritt 3: Artwork

Nach der Auswahl der Zielplattform müssen Sie zunächst die Größe der Grafik festlegen, die wir im Spiel verwenden werden. Auf diese Weise können wir die richtige Größe für die 3D-Texturen und die 2D-GUI auswählen, ohne dass das Bildmaterial unscharf wird oder Texturen verwendet, die für das Zielgerät zu groß sind. Zum Beispiel muss das Bildmaterial eine höhere Auflösung haben, wenn Sie ein iPad mit einem Retina-Display als ein Lumia 520 anvisieren.

iOS

  • iPad ohne Retina: 1024px x 768px
  • iPad mit Retina: 2048px x 1536px
  • 3,5 "iPhone / iPod Touch ohne Retina: 320px x 480px
  • 3,5 "iPhone / iPod mit Retina: 960px x 640px
  • 4 "iPhone / iPod Touch: 1136px x 640px

Android

Da Android eine offene Plattform ist, gibt es eine Vielzahl von Geräten, Bildschirmauflösungen und Pixeldichten. Nachfolgend sind einige der häufigsten aufgeführt.

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

Windows Phone und BlackBerry

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

Beachten Sie, dass der Code, den wir in diesem Lernprogramm schreiben, für alle Plattformen verwendet werden kann.

Schritt 4: Grafiken exportieren

Abhängig von den Zielgeräten müssen Sie das Bildmaterial möglicherweise in die empfohlene Größe und Pixeldichte konvertieren. Sie können dies in Ihrem bevorzugten Bildeditor tun. Ich habe die verwendet Größe anpassen…  Funktion unter der Werkzeuge Menü in OS X Vorschau Anwendung.

Schritt 5: Konfigurieren Sie die Benutzeroberfläche von Unity

Bevor wir anfangen, stellen Sie sicher, dass 2D Taste in der Szene Panel wird nicht hervorgehoben. Sie können auch die Auflösung ändern, die im angezeigt wird Spiel Panel.

Sie erhalten dann die Arbeitsbereich-Bedienfelder, die wir ebenfalls in diesem Lernprogramm verwenden werden. Nehmen Sie sich einen Moment Zeit und schauen Sie sich die Hauptschnittstellen an SzeneSpiel, Hierarchie, Projekt, Vermögenswerte, und Inspektor. Wir werden sie in diesem Tutorial häufig verwenden.

Schritt 6: Programmiersprache

Bei der Verwendung von Unity können Sie eine von drei Programmiersprachen verwenden, C #UnityScript, eine Variation von JavaScript und Boo. Jede Programmiersprache hat ihre Vor- und Nachteile und es liegt an Ihnen, zu entscheiden, welche Sie bevorzugen. Meine persönliche Präferenz gilt der Programmiersprache C #, also die Sprache, die ich in diesem Tutorial verwenden werde.

Wenn Sie sich für eine andere Programmiersprache entscheiden, werfen Sie einen Blick auf die Skriptreferenz von Unity. Dort finden Sie Beispiele.

2. Ressourcen

Soundeffekte

Ich werde eine Reihe von Sounds verwenden, um das Hörerlebnis des Spiels zu verbessern. Die in diesem Lernprogramm verwendeten Soundeffekte stammen von PlayOnLoop und Freesound.

3D-Modelle

Um das Spiel zu erstellen, benötigen wir zunächst einige 3D-Modelle. Ich empfehle 3docean für hochwertige Modelle und Texturen, aber wenn Sie testen oder lernen, funktionieren kostenlose Modelle genauso gut. Die Modelle in diesem Lernprogramm wurden von SketchUp 3D Warehouse heruntergeladen, wo Sie eine Vielzahl von 3D-Modellen finden.

Da Unity das SketchUp-Dateiformat nicht erkennt, müssen wir es in etwas konvertieren, das von Unity importiert werden kann. Wir müssen zuerst die kostenlose Version von SketchUp herunterladen, die als SketchUp Make bezeichnet wird.

Öffnen Sie das 3D-Modell in SketchUp Make, wählen Sie Exportieren> 3D-Modell von dem Datei Menü und wählen Sie Collada (* .dae). Wählen Sie einen Namen und einen Ort und klicken Sie auf sparen. Dadurch werden eine Datei und ein Ordner für das 3D-Modell erstellt. Die Datei enthält die Daten für das 3D-Objekt, während der Ordner die Texturen des Modells enthält. Im nächsten Schritt importieren wir das Modell in Unity.

3. Assets importieren

Bevor wir mit der Codierung beginnen, müssen wir die Assets zum Unity-Projekt hinzufügen. Sie haben mehrere Möglichkeiten, dies zu tun:

  • wählen Neues Asset importieren von dem Vermögenswerte Speisekarte
  • Ziehen Sie die Assets in das Projektfenster
  • Fügen Sie die Elemente dem Ordner "Assets" des Projekts hinzu

Nachdem Sie diesen Schritt abgeschlossen haben, sollten Sie die Assets in Ihrem Projekt sehen Vermögenswerte Ordner in der Projekt Panel.

4. Kamera und Beleuchtung einrichten

Schritt 1: Einrichten der Kamera

In diesem Schritt positionieren wir die Hauptkamera, um die gewünschte Ansicht zu erstellen. Wählen Sie die Hauptkamera aus Hierarchie Panel und stellen Sie das ein Verwandeln Werte in der Inspektor passend zu den unten gezeigten.

Machen Sie sich keine Sorgen, wenn Sie keine Änderungen sehen. Wir haben noch nichts für die Kamera erstellt.

Schritt 2: Licht einrichten

Damit unsere Objekte in der 3D-Welt sichtbar sind, müssen wir der Szene Licht hinzufügen. Wählen Andere erstellen von dem GameObject Menü und wählen Sie Richtungslicht. Dadurch wird ein Objekt erstellt, das einen Lichtstrahl erzeugt. Ändern Sie seine Verwandeln Werte wie im folgenden Screenshot gezeigt, damit die Szene beleuchtet wird.

Das Licht sollte in der Szene sichtbar sein, wie im folgenden Screenshot dargestellt.

5. Hintergrund hinzufügen

Wir werden eine verwenden Sprite Textur als Hintergrund. Standardmäßig werden Bilder in die importiert Vermögenswerte Ordner werden in konvertiert Textur Instanzen, die auf 3D-Objekte angewendet werden können. Wir müssen diese ändern Textur Instanzen zu Sprite-Textur Instanzen für das Bild, das wir als Hintergrund verwenden möchten.

Wählen Sie das Bild aus, das Sie konvertieren möchten Vermögenswerte Panel und öffnen Sie die Inspektor. Wählen Sprite von dem Texturtyp Speisekarte.

Ziehen Sie den Hintergrund in das Symbol Hierarchie Panel. Es sollte automatisch im angezeigt werden Szene Panel. Verstelle die Verwandeln Werte in der Inspektor wie im nächsten Screenshot gezeigt.

6. Erstellen Sie die Score-GUI

Um die Punktzahl des Spiels anzuzeigen, verwenden wir die von Unity GUI-Text und ein importiertes 3D-Modell.

Schritt 1: Hinzufügen des Apple-Modells

Wählen Sie das importierte 3D-Modell Ihrer Wahl aus Vermögenswerte und ziehen Sie es auf die Szene. Ich werde ein Apfelmodell verwenden. Verstelle die Verwandeln Werte in der Inspektor passend zu den unten gezeigten.

Dadurch wird der Apfel oben links auf dem Bildschirm angezeigt.

Schritt 2: Hinzufügen des GUI-Texts

Zusammen mit dem Apfelmodell wird eine Zahl angezeigt, die die Punktzahl des Spielers angibt. Dies ist die Anzahl der Früchte, die der Spieler geschnitten hat.

Wählen Andere erstellen> GUI-Text von dem GameObject Menü, um ein Textobjekt zu erstellen, platzieren Sie es rechts neben dem Apfelmodell und ändern Sie den Text im Inspektor Panel zu 0.

Sie können eine benutzerdefinierte Schriftart einbetten, indem Sie sie in die importieren Vermögenswerte Ordner und Ändern der Schriftart Eigenschaft des Textes in der Inspektor.

7. Erstellen Sie die Timer-GUI

Wir verwenden einen Timer, um anzuzeigen, wann das Spiel vorbei ist. Es besteht aus einem GUI-Textur zeigt ein Symbol und a GUI-Text Anzeige der verbleibenden Zeit.

Schritt 1: Hinzufügen des Uhrensymbols

Um das Uhrensymbol hinzuzufügen, wählen Sie das Bild aus, das Sie verwenden möchten Vermögenswerte Panel und öffnen Sie die Inspektor. Wählen GUI von dem Texturtyp Menü, um es in eine GUI-Textur zu konvertieren. Ziehen Sie das Bild per Drag & Drop in die Szene und ändern Sie die Transformationswerte in die unten gezeigten.

Die Szene sollte jetzt so aussehen.

Schritt 2: Hinzufügen des GUI-Texts

Wiederholen Sie die Schritte zum Hinzufügen des Notentextes, um den Timertext hinzuzufügen. Vergessen Sie nicht, den Text auf die richtige Zeit einzustellen.

8. Alert Prefab

Die Warnung ist a GUI-Textur dass wir zeigen, wenn der Timer erreicht 0. In der Mitte des Bildschirms wird eine Game Over-Nachricht angezeigt.

Konvertieren Sie zum Erstellen der Warnung Ihr Warnbild in a GUI-Textur Verwendung der Inspektor. Ziehen Sie es aus dem Hierarchie Panel zum Vermögenswerte Panel, um es in ein zu konvertieren Prefab.

9. Timer Klasse

Lassen Sie uns jetzt das implementieren Timer Klasse. Wähle aus Zeit GUI Text, drücke den Komponente hinzufügen Taste in der Inspektor Panel und wählen Sie Neues Skript. Benennen Sie das Skript Timer Vergessen Sie nicht, die Sprache in C # zu ändern. Öffnen Sie die neu erstellte Datei und folgen Sie den nächsten Schritten.

Schritt 1: Variablen deklarieren

Wir beginnen mit der Erstellung einer Reihe von Variablen, die wir in verwenden werden Timer Klasse.

private GUIText timeTF; public GameObject-WarnungReferenz

Lassen Sie uns einen Blick auf die einzelnen Variablen werfen.

  • timeTF: ein Verweis auf den Time GUI Text
  • alertReference: ein Verweis auf das Alert-Prefab

Wir verwenden diese Referenzen, um auf die Zeit- und Alarmobjekte zuzugreifen und deren Werte zu ändern. Stellen Sie die Warnmeldung vor Inspektor.

Schritt 2: Setup

Mit den deklarierten Variablen setzen wir das timeTF Wert durch Zugriff auf die guiText Eigenschaft des aktuellen Spielobjekts. Dadurch können wir den Textwert später ändern.

Wir nennen auch die InvokeRepeating Methode, die das aufrufen wird ReduceTime Methode jede Sekunde.

void Start () timeTF = gameObject.guiText; InvokeRepeating ("ReduceTime", 1, 1); 

Schritt 3: Implementieren ReduceTime

Das ReduceTime Die Methode ist dafür verantwortlich, den Timer-Text zu aktualisieren und die Warnmeldung anzuzeigen. Das Spiel ist vorbei, wenn die Zeit erreicht ist 0. Fügen Sie dem folgenden Code-Block hinzu Timer Klasse.

void ReduceTime () if (timeTF.text == "1") / * Alert * / Time.timeScale = 0; Instanziieren (alertReference, neuer Vector3 (0.5f, 0.5f, 0), transform.rotation); Audio.Play (); GameObject.Find ("AppleGUI"). GetComponent().Halt();  timeTF.text = (int.Parse (timeTF.text) - 1) .ToString (); 

Wir beginnen mit dem Testen, ob die Zeit kurz vor dem Ende steht. Ob wahr, Wir pausieren das Spiel, indem wir das ändern Zeitstrahl Eigentum an 0, Erstellen Sie eine Instanz der Warnung, und spielen Sie das Spiel über den Sound.

Wenn die Zeit nicht zu Ende geht, reduzieren wir einfach ihren Wert um 1. Dazu verwenden wir die int.Parse Methode, um die Zeitzeichenfolge in eine Zahl umzuwandeln, subtrahieren 1, und Ruf an ToString darauf, um das Ergebnis zurück in eine Zeichenfolge zu konvertieren.

Schritt 4: Neu laden Methode

Dies ist der letzte Teil des Timer Klasse. In dem Neu laden Methode nennen wir LoadLevel auf der Anwendung klassifizieren und laden Sie die aktuelle Ebene neu und setzen Sie jedes Objekt und jede Variable in den Ausgangszustand zurück.

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

So sollte die gesamte Klasse aussehen, wenn sie fertig ist.

mit UnityEngine; using System.Collections; public class Timer: MonoBehaviour private GUIText timeTF; public GameObject-WarnungReferenz; void Start () timeTF = gameObject.guiText; InvokeRepeating ("ReduceTime", 1, 1);  void ReduceTime () if (timeTF.text == "1") / * Alert * / Time.timeScale = 0; Instanziieren (alertReference, neuer Vector3 (0.5f, 0.5f, 0), transform.rotation); Audio.Play (); GameObject.Find ("AppleGUI"). GetComponent().Halt();  timeTF.text = (int.Parse (timeTF.text) - 1) .ToString ();  void Reload () Application.LoadLevel (Application.loadedLevel); 

10. Apple Prefab

Der Apfel ist eines der wichtigsten Elemente des Spiels und es ist eines der interaktiven Objekte des Bildschirms. Der Spieler kann den Touchscreen des Geräts über den Touchscreen des Geräts abschneiden und so die Punktzahl erhöhen.

Ziehen Sie den Apfel aus der Vermögenswerte Panel zum Szene. Machen Sie sich keine Sorgen über die Position, denn wir konvertieren sie in eine Prefab in einem Moment und entfernen Sie es aus dem Hierarchie.

Schritt 1: Fügen Sie Rigidbody hinzu

Um eine Kollision mit dem Apfel zu erkennen, müssen Sie eine hinzufügen Starrer Körper dazu Um einen hinzuzufügen, wählen Sie Komponente hinzufügen von dem Inspektor Panel und wählen Sie Physik> Rigidbody. Sie können die Einstellungen auf ihren Standardwerten belassen.

Schritt 2: Fügen Sie den Box Collider hinzu

Außerdem müssen wir dem Apfel einen Box-Collider hinzufügen, um Kollisionen zu erkennen. Dieser Collider definiert den Trefferbereich des Apfels. Drücke den Komponente hinzufügen Taste in der Inspektor Panel, wählen Sie Physik> Box Collider, und ändern Sie die Werte wie in der Abbildung unten gezeigt.

In dem Szene In diesem Fenster sollte ein grünes Feld um den Apfel angezeigt werden, das den gerade hinzugefügten Box-Collider darstellt.

11. Splash Prefab

Das Splash-Fertigteil wird als visueller Effekt verwendet, wenn die Frucht vom Spieler geschnitten wird. Es erscheint auf der Bühne für jedes Obst, das der Spieler schneidet und im Laufe der Zeit langsam verschwindet. Konvertieren Sie das Bild in ein Sprite wie zuvor beschrieben, und fügen Sie es dem hinzu Szene.

Fügen Sie ein Skript hinzu und ziehen Sie es zurück in das Verzeichnis Vermögenswerte Panel zum Erstellen eines Prefab. Öffnen Sie die neu erstellte Klasse.

12. Spritzen Klasse

Das Spritzen Die Klasse behandelt die Bilder, die erstellt werden, wenn die Frucht geschnitten wird.

Schritt 1: Variablen deklarieren

Diese Variablen werden verwendet, um einen Alpha-Wert für das Splash-Prefab zu berechnen und festzulegen. Durch Ändern der Alpha-Eigenschaft können wir das Prefab im Laufe der Zeit ausblenden.

private Farbe randomAlpha; private float currentAlpha;

Schritt 2: Setup

Bei dieser Methode berechnen wir einen zufälligen Alpha-Wert aus 0,3 zu 0,5 und speichern Sie diesen Wert im zufälligeAlpha Variable. Dann setzen wir das resultierende Alpha auf Farbe Eigentum des Spielobjekts.

In der letzten Codezeile rufen wir die Methode auf, die diesen Wert jedes Mal verringert 300 Millisekunden, wodurch ein Fading-Effekt entsteht.

void Start () randomAlpha = neue Farbe (1, 1, 1, Random.Range (0,3f, 0,5f)); gameObject.renderer.material.color = randomAlpha; InvokeRepeating ("ReduceAlpha", 0,3f, 0,3f); 

Schritt 3: Reduziere Alpha und Zerstöre

Um das Alpha zu reduzieren, müssen wir zuerst den aktuellen Wert ermitteln. Das StromAlpha Variable speichert diesen Wert. Wir ziehen dann ab 0,1 von diesem Wert und weisen Sie dem Spielobjekt das neue Alpha zu. Das Bild wird entfernt, wenn es fast unsichtbar ist.

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

Das ist was der Spritzen Klasse sieht aus wie.

mit UnityEngine; using System.Collections; öffentliche Klasse Splash: MonoBehaviour private Color randomAlpha; private float currentAlpha; void Start () randomAlpha = neue Farbe (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. Apfel Klasse

Nachdem unser Splash-Prefab erstellt wurde, können wir jetzt mit der Apfel Klasse. Diese Klasse behandelt Aktionen, z. B. Kollisionserkennung, Aktualisierung der Partitur und Entfernen des Apfels aus der Szene.

Schritt 1: Variablen deklarieren

Drei Variablen sind im deklariert Apfel Klasse:

  • splashReference: Verweis auf das Splash-Prefab
  • randomPos: Position für das Spritzwerk
  • scoreReference: Verweis auf den Score-GUI-Text
[SerializeField] privates GameObject splashReference; private Vector3 randomPos = new Vector3 (Random.Range (-1, 1), Random.Range (0,3f, 0,7f), Random.Range (-6,5f, -7,5f)); private GUIText scoreReference;

Schritt 2: Holen Sie sich die Notenreferenz

Um einen Verweis auf den Score-Text zu erhalten, verwenden wir die Finden Methode. Diese Methode durchsucht die aktiven Spielobjekte und gibt das Objekt, nach dem wir suchen, die Punktzahl zurück GUI-Text in diesem Fall.

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

Mit dem scoreReference Durch Variablensatz können wir jetzt den Wert erhöhen, wenn eine Frucht geschnitten wird.

Schritt 3: Zerstören Sie Wenn Offstage

In dem Aktualisieren Auf diese Weise prüfen wir, ob die Frucht auf dem Bildschirm nicht mehr sichtbar ist y positionieren und entfernen, wenn wahr. Dies hilft uns dabei, Speicher freizugeben, indem nicht verwendete Spielobjekte zerstört werden.

void Update () / * Entferne Obst, wenn es nicht sichtbar ist * / if (gameObject.transform.position.y < -36)  Destroy(gameObject);  

Schritt 4: Kollisionen behandeln

Der nächste Code verwendet die OnCollisionEnter Methode, um zu erkennen, wann die Frucht vom Spieler geschnitten wird. Wenn dies passiert, spielen wir den Cut-Sound und entfernen die Früchte. Als Nächstes erstellen wir eine neue Instanz des Splash-Prefab und aktualisieren die Bewertung.

void OnCollisionEnter (Kollision anderer) if (other.gameObject.name == "Line") Camera.main.GetComponent().Abspielen(); Zerstöre (gameObject); Instanziieren (splashReference, randomPos, transform.rotation); / * Update Score * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString (); 

Das ist was das Ganze Apfel Klasse sieht aus wie.

mit UnityEngine; using System.Collections; öffentliche Klasse Apple: MonoBehaviour [SerializeField] privates GameObject splashReference; private Vector3 randomPos = new Vector3 (Random.Range (-1, 1), Random.Range (0,3f, 0,7f), Random.Range (-6,5f, -7,5f)); private GUIText scoreReference; void Start () scoreReference = GameObject.Find ("Score"). guiText;  void Update () / * Entferne Obst, wenn es nicht sichtbar ist * / if (gameObject.transform.position.y < -36)  Destroy(gameObject);   void OnCollisionEnter(Collision other)  if(other.gameObject.name == "Line")  Camera.main.GetComponent().Abspielen(); Zerstöre (gameObject); Instanziieren (splashReference, randomPos, transform.rotation); / * Update Score * / scoreReference.text = (int.Parse (scoreReference.text) + 1) .ToString (); 

14. FruitSpawner Klasse

Das FruitSpawner Die Klasse instanziiert und versetzt die Früchte in die Szene. Es ist an der Hauptkamera befestigt.

Schritt 1: Variablen deklarieren

Dies sind die in dieser Klasse deklarierten Variablen.

[SerializeField] privates GameObject appleReference; private Vector3 throwForce = new Vector3 (0, 18, 0);
  • appleReference: Verweis auf die Apfelfabrik
  • throwForce: die Kraft, mit der die Früchte nach oben gedrückt werden

Schritt 2: Spawn aufrufen

In den nächsten Codezeilen nennen wir das InvokeRepeating Methode zum Aufrufen der SpawnFruit Methode alle sechs Sekunden. Dadurch werden der Szene alle sechs Sekunden neue Früchte hinzugefügt, sodass der Spieler Zeit hat, sie zu schneiden, bevor die Früchte auf den Boden der Szene fallen.

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

Schritt 3: SpawnFruit Methode

Das SpawnFruit Die Methode erstellt die Früchte und drückt sie nach oben, damit der Spieler sie schneiden kann. Wir benutzen ein zum eine Anweisung, um die Früchte zu instanziieren, sie zufällig auf der Szene zu positionieren und eine physische Kraft mit der 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);  

Das ist das komplette FruitSpawner Klasse.

mit UnityEngine; using System.Collections; öffentliche Klasse FruitSpawner: MonoBehaviour [SerializeField] privates GameObject appleReference; private Vector3 throwForce = new Vector3 (0, 18, 0); void Start () InvokeRepeating ("SpawnFruit", 0.5f, 6);  void SpawnFruit () für (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. Berühren Sie die Steuerelemente

Lassen Sie uns nun die Touch-Bedienelemente implementieren. Der Spieler kann mit dem Touchscreen die Früchte schneiden. Wir werden dies visualisieren, indem Sie mit der Linie eine Linie zeichnen LineRenderer klasse und prüfe, ob die Früchte mit der Wischgeste des Spielers kollidieren.

Schritt 1: Variablen deklarieren

Wir beginnen mit dem Erstellen einiger Variablen.

  • c1, c2: Diese Variablen legen die Farbe der Linie fest
  • lineGO: Dieses Spielobjekt enthält den Linienrenderer
  • lineRenderer: Die Line-Renderer-Instanz
  • ich: ein int-Wert, der zum Festlegen der Größe und des Index der Zeile verwendet wird
öffentliche Farbe c1 = Farbe.gelb; öffentliche Farbe c2 = Farbe.rot; privates GameObject lineGO; privater LineRenderer lineRenderer; private int i = 0;

Schritt 2: Setup

In dem Start Dabei richten wir die notwendigen Objekte und Eigenschaften für die Linie ein. Wir beginnen mit dem Erstellen eines neuen GameObject Instanz mit der LineRenderer. Wir verwenden dann einige der Linienrenderer-Methoden, um die Art und Weise festzulegen, wie sie aussehen soll.

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

Die meisten in diesem Codeblock festgelegten Eigenschaften sind leicht verständlich, SetColor ändert die Farbe der Linie und SetWidth setzt seine Breite. Achten Sie besonders auf die SetVertexCount Linie. Diese Methode gibt die Anzahl der Punkte der Linie an. Durch Aufrufen dieser Methode mit einer höheren Anzahl von Punkten können wir die Größe der Linie erhöhen. Dies wird im nächsten Schritt klarer.

Schritt 3: Linie erstellen

Die Zeile wird im erstellt Aktualisieren Methode. Wir testen zunächst, ob der Spieler den Bildschirm berührt, indem Sie das Symbol aufrufen touchCount Eigentum der Eingang Klasse. Wenn die Eigenschaft größer ist 0, Dies bedeutet, dass sich mindestens ein Finger auf dem Bildschirm des Geräts befindet.

Wir behalten einen Hinweis auf die Berühren Objekt für einen einfacheren Zugriff und überprüfen Sie, in welcher Phase es sich gerade befindet. Wir brauchen es in der Gerührt Phase, um die Linie erstellen zu können.

Wenn der Spieler den Finger über den Bildschirm bewegt, können Sie an dieser Position ein Liniensegment erstellen. Wir rufen das an SetVertexCount erneut, um die maximale Anzahl von Segmenten der Linie zu erhöhen.

void Update () if (Input.touchCount> 0) Berühren Sie 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 ++;  

Schritt 4: Fügen Sie Collider hinzu

Wenn die Linie vorhanden ist, fügen wir einen Collider hinzu, um eine Kollision mit den Früchten zu erkennen. Das folgende Code-Snippet erstellt einen Box-Collider und fügt ihn der Zeile mithilfe von hinzu AddComponent Methode und setzt seine Position auf die lineRendereraktuelle Position. Die letzte Codezeile ändert die Standardgröße des Colliders entsprechend der Zeilengröße.

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

Schritt 5: Linie entfernen

Wir entfernen die Linie, wenn der Player den Bildschirm nicht mehr berührt. Dies verhindert unerwünschte Kollisionen mit den Äpfeln.

Im nächsten Codeausschnitt prüfen wir, ob die aktuelle Phase des Berühren Objekt ist Endete und legen Sie die Scheitelpunktzahl der fest lineRenderer zu 0. Dadurch werden die aktuellen Liniensegmente entfernt, das Objekt wird jedoch nicht zerstört, sodass wir es später wiederverwenden können. Wir setzen auch die zurück ich Variable zur späteren Verwendung.

if (touch.phase == TouchPhase.Ended) / * Remove Line * / lineRenderer.SetVertexCount (0); i = 0; 

Schritt 6: Zerstöre Colliders

Sobald die Linie entfernt ist, brauchen wir die daran angebrachten Box-Collider nicht mehr. Wir erstellen zuerst ein Array von BoxCollider Objekte, Speichern der Box-Collider des Linienspielobjekts. Wir durchlaufen dann das Array und zerstören jeden Box-Collider.

/ * Entfernen Sie Line Colliders * / BoxCollider [] lineColliders = lineGO.GetComponents(); foreach (BoxCollider b in lineColliders) Zerstören (b); 

Werfen wir einen Blick auf die vollständige Implementierung von LinesHandler Klasse.

mit UnityEngine; using System.Collections; public class LinesHandler: MonoBehaviour public Farbe c1 = Farbe.gelb; öffentliche Farbe c2 = Farbe.rot; privates GameObject lineGO; privater LineRenderer lineRenderer; private int i = 0; void Start () lineGO = neues GameObject ("Line"); lineGO.AddComponent(); lineRenderer = lineGO.GetComponent(); lineRenderer.material = neues Material (Shader.Find ("Mobile / Particles / Additive")); lineRenderer.SetColors (c1, c2); lineRenderer.SetWidth (0,3F, 0); lineRenderer.SetVertexCount (0);  void Update () if (Input.touchCount> 0) Berühren Sie 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 hinzufügen * / BoxCollider bc = lineGO.AddComponent(); 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; / * Entfernen Sie Line Colliders * / BoxCollider [] lineColliders = lineGO.GetComponents(); foreach (BoxCollider b in lineColliders) Zerstören (b); 

16. Abschließende Schritte

Schritt 1: Testen

<