Es gibt viele Artikel über
Unity für den Neuling, aber ich möchte mich nicht wiederholen, aber ich möchte meine Erfahrungen bei der Entwicklung des ersten Spiels teilen und insbesondere darüber sprechen, worüber ich gestolpert bin. Dies gibt Ihnen allen, liebe Entwickler, die Möglichkeit, sich in Zukunft vor ungeplanter Arbeit und Zeitverlust zu schützen. Ich hoffe, dass dieses Material von
Unity- Entwicklern gelesen wird, um ihr Produkt zu verbessern.
Achtung , unter den Katzen-Screenshots
16+ !
Da die meisten von uns technische Leute sind, werde ich alles in die Regale stellen, Modeerscheinungen machen und versuchen, das Material so kurz wie möglich, präzise und ohne Wasser zu präsentieren.
Herausforderung
Ich wollte etwas Neues schreiben, einfach im Verständnis und im Management. Als Ergebnis der Diskussion mit der Zielgruppe (meinem Kind) wurde entschieden, dass das Spiel so aussehen würde:
- 2D (da es bequemer ist, 2D-Spiele auf dem Telefon zu spielen)
- Ein-Finger-Steuerung (manchmal maximal zwei)
- Zeitkiller (nur ein Stoß, um das Gehirn nicht zu belasten)
- Leistungssystem (um es zumindest ein wenig interessant zu machen, fortzufahren)
- Cartoon
- Schöne Musik
- Ohne Internet
- Android (einfache Installation von Test-Apk-Dateien)
Das alles führte zu der Idee
" Satan Santa schießt auf Hirsche, die seine Tasche stören .
"
Und dann fing alles an ...
1. Android-Bibliotheken von Drittanbietern
Problem: Ich habe zwei Tage damit verbracht, das richtige SDK, JDK, NDK zu finden und Unity mit ihnen arbeiten zu lassen. Auf meinem Computer vor Unity war SDK aus dem Android Studio bereits vorhanden, aber es begann nicht mit ihnen, ich musste nach etwas anderem suchen, installieren, versuchen, erneut suchen ... zwei Tage ...
Verbesserungsvorschlag: Es wäre schön, wenn das erforderliche SDK der neuesten Versionen während der Installation von Unity automatisch installiert würde und wenn jemand ein Downgrade oder Upgrade durchführen müsste - dann lassen Sie dieses selbst mit Stiften konfigurieren.

2. Vektorgrafiken
Problem: Unity out of the box versteht
SVG nicht . Selbst alle Arten von kleinen JS-Frameworks wie Paper.js arbeiten einfach intelligent mit einem Vektor, ein Elefant wie Unity jedoch nicht.
Lösung: Ich habe ein Beta-Paket installiert, das SVG zu lesen scheint, aber am Ende konvertiert es es in ein Raster. Akzeptabel, aber peinlich, Einheit!
3. 2D-Plattform
Problem: Wie Sie auf dem Screenshot sehen können, gibt es Land und Schneeball darauf. Und das ist auch
Mesh and
Polygon Collider . Das heißt, es ist eine Oberfläche, die mit Objekten interagiert und die im Editor geändert werden kann. In der aktuellen Version von Unity gibt es also keine Standardwerkzeuge, mit denen dies simuliert werden kann.
Lösung:- Sie können ein Raster mit Alpha zeichnen (Minus - das Bearbeiten dieses Brunnens ist ziemlich unpraktisch)
- Sie können ein Plugin kaufen, das dies tut (minus - Geld ausgeben)
- Sie können das Plugin selbst schreiben (Minus - es dauert lange, bis Sie es herausgefunden haben, und es dauert lange, bis Sie es geschrieben haben).
Ich habe einen langen, aber freien Weg gewählt;) Wenn jemand ein solches Plugin benötigt - schreibe, teile, sage, wie man es benutzt, es macht mir nichts aus :)
Übrigens habe ich mir die Demo der neuen Unity-Beta angesehen, es scheint, als würde so etwas sofort erscheinen! Danke dafür, Freunde!
Ja, ich würde ein Bedienfeld hinzufügen, um schnell 2D-Grundelemente, Kreise und Quadrate zu erstellen. Andernfalls existieren sie einfach nicht, oder Sie müssen auf die Asset-Seite gehen und nachsehen.
4. Rotation & Quaternion
Problem: Ein sehr komplexes System zur 3D-Positionierung und -Rotation, das in 2D-Spielen nicht erforderlich ist.
Lösung: Sie müssen es nur verstehen und akzeptieren, denn ein 2D-Spiel ist ein 3D-Spiel mit der Koordinate Z = 0. Aber es wäre schön, dieses System im 2D-Modus zu vereinfachen, Genossen;)
Ich habe viel Zeit getötet und mir fast das Gehirn gebrochen und versucht, das Objekt in die richtige Richtung in den richtigen Winkel zu einem anderen Objekt zu drehen, als ich in einer anderen Engine gerade
player.a = 45 geschrieben habe. Ja, und viele offensichtliche Methoden in der aktuellen Version sind nicht verfügbar.
5. Debuggen
Problem: Für uns Anfänger besteht die Möglichkeit des Debuggens nur in Form der Ausgabe des Variablenwerts an die Konsole mit der
print () -Methode. Vollwertige Pausen sind das Los derer, die bezahlen. Korrigieren Sie mich hier, wenn ich mich irre, aber ich konnte Visual Studio in keiner Weise für das Debuggen konfigurieren, obwohl ich ein Video gefunden habe, in dem klar war, dass nichts konfiguriert werden musste, sollte es von selbst funktionieren. Er kam zu dem Schluss, dass das Debuggen in kostenpflichtigen Versionen verfügbar ist.
Lösung: Ich verwende nur
print () ... und verstehe, dass das Debuggen eines komplexen Projekts ein entscheidender Faktor für den Erwerb einer kostenpflichtigen Version von Unity ist. Vermarkter des Unternehmens traurigen Respekt :(
Gelöst! Dank der
Leopotam- Eingabeaufforderung habe ich ein zusätzliches Paket für das Studio installiert. Die Schaltfläche
"An Unity-Debugger anhängen" wurde angezeigt.
6. Tippen und klicken, wischen und bewegen
Problem: Trotz des Komforts des integrierten Benutzereingabesystems reicht die einfache Verarbeitung gewöhnlicher Einzelbänder, Klicks und Wischbewegungen nicht aus. Ich möchte eine Methode verwenden, die die Koordinaten eines einzelnen Klicks / Tippens für verschiedene Gerätetypen zurückgibt: eine Berührung und einen Desktop mit einer Maus, zum Beispiel.
Lösung: Ich musste meine Klassenebene schreiben und die erforderlichen Ereignisse einschließen.
Vielleicht werde ich noch einen Kommentar zum Managementsystem hinterlassen. Vielen Dank an die Unity-Entwickler für den universellen Eingang, aber für Touch-Geräte möchte ich auch universelle Steuerungen. Zum Beispiel nach oben schieben - an Springen binden, Kreuz und Schaltflächen wie auf einem Joystick visualisieren und so weiter. Sie können dies in kostenpflichtigen Paketen kaufen oder sich selbst schreiben und Zeit mit Fahrrädern verbringen.
7. Verwechslung mit Koordinaten
Problem: Sie können dem Objekt die Klickkoordinaten nicht zuweisen und es nicht an der richtigen Stelle sehen. Dies ist etwas offensichtlich.
Lösung: Zuerst müssen Sie die Dokumentation lesen, verschiedene Methoden zum Zuordnen von Koordinaten verstehen und anwenden:
WorldToScreenPoint ()
ScreenToViewportPoint ()
transform.TransformPoint ()und andere…
Ich werde dies erklären, weil der Abstand in der Szene in beliebigen anderen Einheiten als einem Pixel gemessen wird und außerdem Objekte ein Verschachtelungssystem haben, wobei die Positionierung relativ zum übergeordneten Element ist.
8. Eine magere Reihe von UI-Steuerelementen
Problem: Es werden nur die grundlegendsten Elemente aus der Box geliefert, und selbst dann müssen Sie an einigen basteln.
Lösung: Sie können mit wenig zufrieden sein. Zum Beispiel habe ich viel Zeit damit verbracht, die dynamische Liste zu scrollen. Sie können coole Steuerelemente kaufen (minus - Geld ausgeben).
9. Große APK-Datei
Problem: Beim Erstellen eines leeren Projekts beträgt seine Größe
21,9 MB (23.061.612 Byte).
Lösung: Sie müssen alles sparen. Ich habe MP3-Dateien gekniffen, Texturen komprimiert und versucht, nichts Überflüssiges in das Projekt aufzunehmen. Aber als zusätzliche Pakete verbunden wurden, nahm die Größe gnadenlos zu und strebte nach hundert.
Google Play fordert Entwickler auf, Anwendungen
<100 MB zu veröffentlichen . (22 bereits verschlungen). Es gibt natürlich Mechanismen der Aufteilung und dynamischen Belastung von Ressourcen, aber wir sind Neulinge, und unser Ziel ist es, die Grundlagen zu lernen, unsere geliebten Träume zu verwirklichen und nicht mit den Grenzen des Marktes zu kämpfen.
10. Kyrillisch
Problem: Nachdem ein Projekt für die JS / HTML5-Plattform (für Tests) zusammengestellt wurde, stellte sich heraus, dass einfach keine Texte in russischer Sprache verfasst waren.
Lösung: Sie müssen die Schriftartdatei herunterladen, in Assets importieren und diese importierte Schriftart in den Einstellungen für jeden Text angeben.
Das ist irgendwie sehr seltsam.
11. Physikleistung
Problem: Das Spiel verlangsamt sich furchtbar, wenn es komplexe Kollider gibt, wenn der
kontinuierliche Modus für die
Kollisionserkennung verwendet wird , wenn mehrere
Partikelsysteme in einer Szene verwendet werden, kurz wenn alles verwendet wird, was dem Spiel Spektakulärität und Schönheit verleiht.
Lösung: Verwenden Sie nur die primitiven
Kreis- und
Rechteckkollider . Die
Kollisionserkennung sollte nur
diskret sein . Die Anzahl der Partikel im
Partikelsystem sollte auf das akzeptable Minimum eingestellt werden. Gut und trotzdem, meinen Fehler nicht zuzugeben und keine Kollisionen innerhalb des Partikelsystems zu verwenden. Der Effekt ist natürlich wunderschön, da Blut über Objekte fließt, aber sehr ressourcenintensiv.

Dies gilt natürlich alles für 2D-Handyspiele. Aber ich möchte, dass Unity sich entwickelt, neue coole Shader für Partikel, Kollisionen und für alles andere verwendet, was komplex und schön ist.
Fazit
Es gab natürlich auch andere Fallstricke, aber das sind Kleinigkeiten. Es gab unerwartete Vorteile wie:
- Fertighäuser
- Gute Dokumentation und Community
- Erstellen Sie automatisch einen Polygoncollider mithilfe des Alphakanals eines Sprites
- Einfache Verwendung von Soundeffekten.
- Sehr praktische Animation auf Keyframes (mit Anima2D und umgekehrter Kinematik)
Aber das ist eine ganz andere Geschichte ...
Was das Timing der Aufgabe angeht, wurde ich durch Punkt 3 (Entwicklung eines Plug-Ins zur Modellierung der Plattform) sehr gehemmt. Als erfahrener Entwickler habe ich das Problem selbst bewertet und wie folgt bewertet: 20, 30, 40 (Abende / freie Tage, weil ich tagsüber mit der Hauptarbeit beschäftigt bin), wobei 20 optimistisch und 40 pessimistisch ist. Wenn es nicht Punkt 3 gegeben hätte, hätte ich 20-30 erreicht, aber am Ende habe ich ungefähr zwei Monate verbracht. (Nein, ich habe nicht jeden Abend gearbeitet, das heißt, ich war ungefähr 40).
Wenn jemand interessiert ist, werde ich sagen, dass ich die Grafiken dank des
Inkscape- Programms selbst zeichnen musste. Ich habe Musik ausschließlich mit einer Lizenz zur freien Nutzung ausgewählt.
Ich musste ein paar Tage damit verbringen, auf
Google Play zu veröffentlichen .
Weitere zwei Tage wurden für die Integration von Werbung aufgewendet (Sie werden es höchstwahrscheinlich nicht sehen, ich wollte es nur unbedingt ausprobieren, obwohl das Spielzeug nicht als kommerziell angesehen wurde).
Ja, vieles hätte verbessert werden können, aber ich wollte meine Freunde vor den Neujahrsferien amüsieren.
Versteh mich nicht falsch, dies ist kein PR-Beitrag. Vor allem möchte ich, dass diejenigen, die die Unity-Engine entwickeln, auf diese Mängel achten und sie natürlich beseitigen (nun, das ist ideal). Und ich möchte auch meinen Geistbrüdern helfen, nicht auf den gleichen Rechen wie ich zu kommen.
Und wenn ich mich in etwas irre, dann urteile nicht streng, teile deine Tipps in den Kommentaren!