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:
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.
Ö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.
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.
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.
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.
Beachten Sie, dass der Code, den wir in diesem Lernprogramm schreiben, für alle Plattformen verwendet werden kann.
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.
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 Szene, Spiel, Hierarchie, Projekt, Vermögenswerte, und Inspektor. Wir werden sie in diesem Tutorial häufig verwenden.
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.
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.
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.
Bevor wir mit der Codierung beginnen, müssen wir die Assets zum Unity-Projekt hinzufügen. Sie haben mehrere Möglichkeiten, dies zu tun:
Nachdem Sie diesen Schritt abgeschlossen haben, sollten Sie die Assets in Ihrem Projekt sehen Vermögenswerte Ordner in der Projekt Panel.
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.
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.
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.
Um die Punktzahl des Spiels anzuzeigen, verwenden wir die von Unity GUI-Text und ein importiertes 3D-Modell.
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.
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.
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.
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.
Wiederholen Sie die Schritte zum Hinzufügen des Notentextes, um den Timertext hinzuzufügen. Vergessen Sie nicht, den Text auf die richtige Zeit einzustellen.
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.
Timer
KlasseLassen 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.
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 TextalertReference
: ein Verweis auf das Alert-PrefabWir verwenden diese Referenzen, um auf die Zeit- und Alarmobjekte zuzugreifen und deren Werte zu ändern. Stellen Sie die Warnmeldung vor Inspektor.
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);
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.
Neu laden
MethodeDies 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);
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.
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.
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.
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.
Spritzen
KlasseDas Spritzen
Die Klasse behandelt die Bilder, die erstellt werden, wenn die Frucht geschnitten wird.
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;
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);
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);
Apfel
KlasseNachdem 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.
Drei Variablen sind im deklariert Apfel
Klasse:
splashReference
: Verweis auf das Splash-PrefabrandomPos
: Position für das SpritzwerkscoreReference
: 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;
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.
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);
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 ();
FruitSpawner
KlasseDas FruitSpawner
Die Klasse instanziiert und versetzt die Früchte in die Szene. Es ist an der Hauptkamera befestigt.
Dies sind die in dieser Klasse deklarierten Variablen.
[SerializeField] privates GameObject appleReference; private Vector3 throwForce = new Vector3 (0, 18, 0);
appleReference
: Verweis auf die ApfelfabrikthrowForce
: die Kraft, mit der die Früchte nach oben gedrückt werdenIn 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);
SpawnFruit
MethodeDas 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);
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.
Wir beginnen mit dem Erstellen einiger Variablen.
c1, c2
: Diese Variablen legen die Farbe der Linie festlineGO
: Dieses Spielobjekt enthält den LinienrendererlineRenderer
: Die Line-Renderer-Instanzich
: 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;
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.
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 ++;
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 lineRenderer
aktuelle 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);
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;
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);