
Dies ist der erste Teil der Geschichte (gemischt mit der Geschichte meiner Fehler und ihrer Lösungen) darüber, wie ich (für ungefähr zwei Jahre in meiner Freizeit) eine mobile Anwendung für iOS und Android entwickelt habe, die meine Tochter motivieren würde, mathematische Beispiele zu lösen, damit sie Automatismus in den Grundlagen der Arithmetik erreicht (Lagernummer 10 oder Multiplikationsschild). Als Ergebnis stellte sich heraus, dass ein Kind mit seinem Verstand Geld verdienen kann.
Ich habe die Unity-Engine und die C # -Sprache sowie eine zusätzliche Software wie Photohsop oder Audacity (zum Erstellen von Sounds) verwendet.
Der Umriss der Geschichte (Teil eins)
- Hintergrund
- Über die Monetarisierung
- Warum Einheit?
- Über skriptfähige Objekte
- Über das Anima2D Plugin
- Über Lean Localization
- Über iTween
- Über Unity Analitics
- Informationen zu Visual Studio
- Referenzen
Hintergrund und Colorado Käfer
Meine vorherige Erfahrung war mehrere Jahre in 3D und in jüngerer Zeit die Entwicklung mehrerer Indie-Spiele zusammen mit einem Programmierer, bei dem ich hauptsächlich als Designer und Künstler tätig war (sehr selten schrieb ich einige elementare Skripte in C #). Obwohl ich mit dem Programmieren aus erster Hand vertraut bin (ich habe in der Schule Basic geschlagen und mich an der Universität mit C / C ++ beschäftigt).
Dieses ganze Epos begann mit einem Problem. Ich habe gesehen, dass meine Tochter bei der Lösung von Schulproblemen „stehen bleibt“ und sich irrt, nicht auf etwas Kompliziertem, sondern auf der Grundlage. Ich entschied, dass es Spaß machen würde, wenn ich ihr eine lustige Anwendung schreiben würde, in der sie Beispiele in Spielform lösen würde (auf diese Weise Erfahrung sammeln und Automatismus erreichen). Und um sie noch mehr zu motivieren, habe ich dafür gesorgt, dass sie Geld für die richtige Entscheidung der Beispiele erhalten hat (der Geldbetrag wurde von der Anwendung anhand der Anzahl der richtigen Antworten berechnet, und dann habe ich den erforderlichen Betrag abgeleitet und meiner Tochter Bargeld gezahlt).
Obwohl ... diese Geschichte noch früher begann. Zuerst machte ich meiner Tochter eine Bewerbung, die Geld für das Erlernen englischer Wörter bezahlte. Es stellte sich jedoch heraus, dass diese Anwendung viel schwieriger zu implementieren war, sodass sie nicht nur für mich (den Entwickler) und meine Tochter, sondern auch für andere Eltern praktisch war. Daher ist die englische Anwendung noch eine interne Entwicklung.
Ich habe das Geld als Motivator gewählt, weil es am einfachsten umzusetzen war. Und auch wegen persönlicher Kindheitserinnerungen: Ich habe es geliebt, alles für Geld zu tun. Auch wenn es eine sehr mühsame Aufgabe war, wie das Sammeln von Kartoffelkäfern. Ich erinnere mich, wie ich ihr halbes Liter Glas gesammelt habe (meine Eltern haben mir 1 Kopeken für jeden Käfer bezahlt). Also dachte ich, da meine Tochter (ich habe es nicht überprüft, aber ich bin mir ziemlich sicher), sollte sie es mögen. Nun, am Ende habe ich nicht verloren.
Meine Frau ist dagegen, Kinder zu ermutigen, etwas für Geld zu tun. Aber mein Argument hat sie ein wenig überzeugt: Bei dieser Bewerbung erhält das Kind Geld nicht für das, was es tun soll (wie Hausaufgaben), sondern dafür, dass es in seiner Freizeit zusätzlich Mathematik praktiziert.
Der zweite Grund, warum ich mit der Entwicklung begann, war, dass ich das Programmieren üben wollte. „Programmierer werden“ ist seit den ersten Schuljahren mein geliebter Traum (direkt nach dem Traum, „Wissenschaftler zu werden“, aber vor dem Traum, „Cartoons zu machen“).
Monetarisierung und Vergnügen
Anfangs habe ich diese Anwendung (der Arbeitsname war Math4Ami) exklusiv für den iPod touch 5 meiner Tochter gemacht. Ich habe nicht einmal daran gedacht, die Anwendung auf allen iOS-Geräten verfügbar zu machen oder für alle zu veröffentlichen, und insbesondere nicht daran, sie für die Android-Plattform zu veröffentlichen (ich habe viele Gruselgeschichten von iOS-Entwicklern gehört und ich habe nichts, auf dem ich die Android-Version testen könnte).
Vor einiger Zeit war ich versucht, es im AppStore zu veröffentlichen (ich war sehr angetan von dem Gedanken, dass ich meine eigene Anwendung im Apple Store haben würde und jeder sie sehen könnte).
Ich dachte, dass ich es in einem Monat schaffen werde. Schließlich war die gesamte Funktionalität bereit. Das einzige, was noch übrig war, war, dass sie für alle Seitenverhältnisse des Bildschirms funktioniert und nicht nur für mich, sondern auch für andere Eltern verständlich ist. Und jetzt, sechs Monate später, habe ich es im AppStore und bei Google Play veröffentlicht.
Ich habe mich zunächst entschlossen, Math4Ami ohne einen Hinweis auf Monetarisierung völlig kostenlos zu machen. Für diese Entscheidung gibt es mehrere Gründe.
Erster. Wie Sie bereits verstanden haben, habe ich es meiner Tochter zunächst kostenlos gemacht und wollte am "Ende" der Entwicklung nichts vermasseln.
Der zweite. Ich entschied, dass es eine Entwicklung zu meinem eigenen Vergnügen sein würde. Ich habe bereits eine ähnliche Erfahrung gemacht - ich mache zum Vergnügen einen Blog (der anfangs nur Geld aß: Geld für das Hosting und einen Domainnamen, Zeit für das Schreiben von Artikeln und deren Werbung). Meine Logik lautete: Wenn ich Geld bezahle, um den Wasserpark zu besuchen, ein Buch oder ein Eis zu kaufen, um Spaß zu haben, warum kann ich es mir dann nicht leisten, Geld für Hosting, Domainnamen oder Mitgliedschaft im Apple Developer Program zu bezahlen, wenn es mir auch Freude macht.
Das dritte - für ein breiteres Publikum, das erheblich gekürzt würde und die Anwendung bezahlt macht (wie es viele Entwickler von Kinderanwendungen tun). Ich habe andere Arten der Monetarisierung aus den unten beschriebenen Gründen abgelehnt.
Ich kann die In-Game-Werbung nicht ausstehen - ich mag es nicht, wenn das Design der Anwendung durch Werbebotschaften entstellt wird (außer für Werbung in Form von Videoansichten nach Belieben und nicht, wenn das Video um die Ecke erscheint). Um an den Programmen "Made for kids" bei Apple und "Designed for Families" bei Google teilnehmen zu können, müssen Sie außerdem die für Kinder angezeigten Anzeigen streng filtern.
Bei Einkäufen im Spiel blockiere ich selbst als Eltern alle Geräte und Kinder, wenn sie Anwendungen selbst herunterladen, kann ich physisch einfach nichts in der Anwendung kaufen. Eine andere Sache ist, wenn der Elternteil selbst zuerst den Antrag für das Kind kauft (aber ich habe dies bereits oben gesagt).
Warum Einheit und wie
Ich habe mich für Unity entschieden, weil ich vorher daran gearbeitet habe und es mir gefallen hat. Ich hatte auch einen guten Freund als C # -Programmierer und ich hoffte, dass er mir beim Programmieren helfen würde, wenn das so wäre. Unity hat auch eine großartige Community und es ist sehr einfach, in Google Antworten auf fast alle Fragen zu finden, die die Implementierung von etwas in C # + Unity betreffen.
Ich habe auch mit Unreal (als 3D-Künstler) gearbeitet, aber ich habe weder C ++ - noch 2D-Funktionalität verstanden.
Anfangs war Math4Ami "bewölkt", obwohl es laut gesagt wird. Alle Daten wurden auf meinem eVPS (Elastic Virtual Private Server) gespeichert und ich habe FTP verwendet, um TXT-Dateien mit Daten- und Anwendungseinstellungen zu übertragen (meine Hände haben die Datenbank nicht erreicht, obwohl ich die ersten Schritte beim Schreiben meines Servers auf node.js geschrieben habe übernommen). Für die Arbeit mit FTP habe ich die benutzerfreundliche Simple C # FTP-Klasse an Unity befestigt.
Als ich mich dann entschied, die App öffentlich zu machen, gab ich die Serverseite auf.
Einerseits wäre dies zu verwirrend: Führen Sie eine Authentifizierung durch (Benutzer mögen dies nicht) oder speichern Sie die Sitzungskennung in iCloud mithilfe von NSUbiquitousKeyValueStore (dies würde den Benutzer automatisch zwischen der Deinstallation der App und der Neuinstallation identifizieren), aber ich konnte es immer noch nicht herausfinden damit (vielleicht würde mir der Artikel, in dem ich das Unity-Plugin richtig geschrieben habe , helfen . Teil 1: iOS , aber dann war es noch nicht so).
Andererseits sind die Daten in dieser Anwendung nicht so wichtig, dass sie auf dem Server gespeichert werden müssen.
Auf der dritten Seite war keine Serversynchronisation erforderlich. Hier für meine Bewerbung für den Englischunterricht - ja, dort war eine Synchronisation erforderlich. Da der Elternteil der Elternanwendung neue Wörter hinzufügt und das Kind sie in der Kinderanwendung unterrichtet (obwohl ich vielleicht ein Amateur bin, um Dinge zu komplizieren).
Als Ergebnis habe ich sichergestellt, dass alles lokal (auf dem Gerät) gespeichert wurde, jedoch nicht in txt, sondern im JSON-Format.
ScriptableObject und richtige Antworten
Das JSON-Format in Verbindung mit ScriptableObject erwies sich als großartiger Fund. Ich habe die nativen Methoden von UnityEngine verwendet, um Objekte in json - JsonUtility zu serialisieren (und dann json-Textdateien lokal auf dem Gerät im Ordner Application.persistentDataPath gespeichert).
ScriptableObject (SO) ist ein separates Gesprächsthema, aber ich werde es trotzdem ansprechen. Ich kann mir gar nicht vorstellen, wie ich früher ohne SO gelebt habe.
Alles, was ich in meiner Arbeit verwende, habe ich aus diesen beiden äußerst nützlichen Videos über die Prinzipien der Arbeit mit SO (und den dazugehörigen Code auf GitHub und Bitbucket) erhalten:
Persönlich habe ich SO für solche Zwecke verwendet:
- So speichern Sie Daten (damit Sie nicht jedes Mal in den Code gehen müssen, um neue Funktionen oder Daten hinzuzufügen):
- Vielzahl von Beispielen
- Art der Währung
- Schaltflächenstil (Ich habe an vielen Stellen dieselben Schaltflächen und erstelle nur Skins für sie basierend auf SO),
- Belohnungswert usw.
- Als globale Variablen (die in allen Szenen sichtbar sind):
- Anzahl der richtigen Antworten
- Geldbetrag verdient
- derzeit aktive Einstellungen
- aktueller Beispieltyp
- Timer, Highscores usw.
- Speichern der Logik (z. B. Abonnieren des Ereignisses, bei dem die richtige Antwort empfangen wurde).
Das einzige Minus von SO für die Arbeit mit Daten ist, dass Sie keine Daten zwischen Anwendungssitzungen darin speichern können: SO-Assets (nach einem Kaltstart der Anwendung) enthalten immer die Daten, die Sie dort im Editor geschrieben haben. Daher lautet die Logik meiner Arbeit wie folgt:
- Nach dem Starten der Anwendung lese ich JSON-Dateien von der Festplatte und lade die Daten von ihnen in SO-Assets (FromJsonOverwrite-Methode).
- Während die Anwendung ausgeführt wird und ich maximale Leistung benötige, arbeite ich nur mit skriptfähigen Objekt-Assets. Diese Assets speichern Daten ständig, während die Anwendung ausgeführt wird oder im Hintergrund.
- Wenn Sie Daten speichern müssen (z. B. beim Beenden der Anwendung oder während der Arbeit), serialisiere ich SO in json (ToJson-Methode) und speichere sie auf der Festplatte.
Es gibt einen (offensichtlichen) Nachteil dieses Ansatzes: Sie können nicht nur einen geänderten Parameter auf der Festplatte speichern (wenn mehrere davon in SO vorhanden sind), sondern müssen die gesamte JSON-Textdatei ständig speichern.
Viele Daten müssen jedoch nicht auf der Festplatte gespeichert werden (z. B. die aktuelle Anzahl der richtigen Antworten), und SO ist ein leistungsstarkes Tool, mit dem ich die Arbeit erheblich vereinfachen kann.
Im folgenden Video zeige ich ein Beispiel für meine Implementierung der Berücksichtigung korrekter und falscher Antworten mit UnityEvent (Ereignis - hat sich die Anzahl der richtigen Antworten geändert) + Listener (Listener arbeiten, wenn sie hören, dass die richtige Antwort empfangen wird, und die Logik, Abonnenten für das Ereignis zu abonnieren, ist es auch implementiert auf SO) + SO (verfolgt die Anzahl der richtigen Antworten):
So kann ich nicht nur die richtigen und fehlerhaften Antworten mit meinen Händen eingeben, sondern einfach durch Bewegen des Schiebereglers neue Beispiele generieren und die Logik der Anwendung testen.
Anima2D, Charaktere und zuckendes Lächeln
Das obige Video zeigt, dass wenn ein neuer Penny fällt, die anderen Pennys breit lächeln und wenn ein Poop fällt, die Pennys entsetzt sind.
Lange Zeit konnte ich die Panne nicht besiegen, als beim Wechsel von einer Art von Lächeln zu einer anderen die Änderung nicht sofort erfolgte, sondern eine Weile blinzelte (von einem Zustand in einen anderen). Weiter werde ich Ihnen erzählen, wie ich das erkannt habe und wie ich diesen Fehler besiegt habe.
Das Ändern von Gesichtsausdrücken wird mithilfe des Sprite Mesh-Animationsskripts implementiert, das Teil des leistungsstarken Anima2D-Plugins ist (das Unity kürzlich gekauft und kostenlos zur Verfügung gestellt hat). Dieses Skript wechselt im Wesentlichen nur die Sprites für den Mund (Lächeln, offenes Lächeln, ängstlicher Mund) mithilfe des Frame- Schiebereglers:

Der ganze Hinterhalt besteht darin, dass der Wert des Frame- Schiebereglers nicht direkt über Skripte geändert werden kann, sondern nur über ein Animationssystem. Aus diesem Grund habe ich im additiven Mischmodus eine neue OpenSmile- Animationsebene (Pfeil 1 in der Abbildung unten) mit einem Gewicht von Gewicht = 1 erstellt und dort eine Animation des Horrors ( Coin_scared ) und ein breites Lächeln ( SmillingWide ) hinzugefügt .
Haben Sie übrigens bemerkt, was für ein schlechtes Beispiel ich mit Animationsnamen setze? Ich bin immer noch dabei, Namen in einen einzigen Stil zu bringen. Es wäre richtig, Coin_scared in A_CoinScared zu ändern (warum lesen Sie das einfach im Abschnitt „Was ich bereue“).
Ich habe eine neue Ebene erstellt und die alte nicht verwendet, da ich die Mundanimation nicht überschreiben wollte. Alles was ich tun musste war das Sprite des Mundes zu ändern (von Lächeln zu breitem Lächeln oder von Lächeln zu Entsetzen) und so dass die Animation des Mundes von der Basisschicht blieb. Aus diesem Grund habe ich den additiven Mischmodus gewählt - eine neue Animation zu einer vorhandenen hinzufügen (ohne sie zu überschreiben).
Im Kern sind SmillingWide- und Coin_scared- Animationen nur Animationen des Frame- Schiebereglers an den Positionen 1 bzw. 2.

Das ganze Problem war, dass der Übergang von einem Zustand in einen Zustand des Grauens (wenn Sie auf einen Übergang klicken (Pfeil 2 in der Abbildung oben), öffnet der Inspektor die Eigenschaften dieses Übergangs (Pfeil 3 in der Abbildung oben)) nicht sofort, sondern reibungslos erfolgte während der Übergangsdauer (Pfeil 4 in der Abbildung oben), die standardmäßig nicht null war. Daher konnte der Wert des Frame- Schiebereglers nicht korrekt geändert werden, da nur Ganzzahlen vorhanden waren, was bedeutet, dass zwischen 0 und 1 kein Zwischenwert liegt. Um den blinkenden Fehler zu beseitigen, musste daher nur der Wert für die Übergangsdauer zurückgesetzt werden.
Nun, der Auslöser isScared (Pfeil 5 in der Abbildung oben) dient als Bedingung, um in einen Zustand des Grauens zu geraten . Ich aktiviere diesen Trigger im Code mit dem folgenden Aufruf des Objekts, an dem die Animator-Komponente hängt (mit dem Controller, dessen Ebenen ich oben gezeigt habe):
...GetComponent<Animator>().SetTrigger("isScared");
Wie ich die Anwendung in verschiedene Sprachen übersetzt habe
Irgendwo hier auf Habré habe ich gelesen, dass Sie zu Beginn der Erstellung der Anwendung über die Lokalisierung nachdenken müssen, und ich habe diesen Rat befolgt ... sofort ... nach anderthalb Jahren Entwicklungszeit (sobald ich beschlossen habe, dass Math4Ami öffentlich sein wird).
Warum ich mich für Lean Localization entschieden habe (außer aus dem Grund, dass das Plugin kostenlos ist), weiß ich nicht mehr, aber ich erinnere mich, dass ich mich lange und hart entschieden habe.
Die Verwendung erwies sich als sehr einfach. Sie können die Sprache entweder manuell einstellen oder die automatische Spracherkennung verwenden. Ich habe mich für die automatische Spracherkennung entschieden (nach dem Beispiel anderer Kinderanwendungen).
Das Plugin übersetzt alles (von Text zu Ton und Bild).
Aber ich habe immer noch einen Fehler bei der Lokalisierung gemacht (obwohl ich es absichtlich gemacht habe, weil ich verschiedene Ansätze ausprobieren wollte). Der Fehler ist, dass ich nicht alle Sätze in eine Textdatei eingefügt habe (links in der Abbildung unten). Einige Phrasen blieben in der Lean Localization-Komponente (rechts in der Abbildung unten). Wenn ich diese Datei einem japanischen Übersetzer übergebe, muss ich manuell arbeiten (um ALLES in eine Textdatei zu übertragen).

Obwohl einige Dinge nicht mit einer Textdatei übersetzt werden können (z. B. das Leerzeichen "", das ich als Trennzeichen zwischen Tausenden verwendet habe), müssen Sie die Komponente weiterhin verwenden.
Saftiges iTween
Es war einmal ein wunderschönes Video von Juice it oder verlor es darüber, wie alle möglichen kleinen Mikrobewegungen und Nuancen von Animationen dazu beitragen, aus einem langweiligen Spiel eine atemberaubende Action zu machen. Und schon vorher ist ein weiteres Video in meine Seele gesunken - Die Kunst des Screenshakes , bei der es eigentlich nicht nur und nicht so sehr um Screen Shake geht.
Während der gesamten Zeit, in der ich Math4Ami erstellt habe, habe ich die Konzepte aus den obigen Videos sowie die Idee berücksichtigt, dass all diese zusätzlichen Animationen so kurz wie möglich sein und mehr auf das Unterbewusstsein als auf das Bewusstsein wirken sollten. Manchmal habe ich mehr Zeit damit verbracht, „Saftigkeit“ hinzuzufügen, als nützliche Funktionen hinzuzufügen.
Nur ein Ort stört mich sehr - die endgültige Zählung des verdienten Geldes (Sie können diesen Moment am Ende meiner Video-Demo oben sehen). Ich habe es gekürzt, sobald ich konnte, aber es dauert immer noch etwas mehr als 4 Sekunden (die Tastatur verschwindet, der Inschriften-Sieg erscheint, Copecks werden gezählt, die Aufzeichnungstabelle wird verlassen, das Typenschild "Neuer Rekorder" wird angezeigt, die Schaltfläche "Mehr" wird angezeigt).
Die beste „ Saftquelle “ für mich ist das kostenlose iTween- Add- On . Ich kann mir gar nicht vorstellen, wie man ohne Unity überhaupt etwas machen kann. Ich verwende es überall dort, wo zumindest eine Art Animation benötigt wird (ob es sich um eine Animation einer Schaltfläche oder das Erscheinen eines Menüelements oder eine Animation zum Zählen von Cent handelt).
Ich habe versucht, etwas Ähnliches selbst basierend auf Coroutinen und Mathf.Lerp oder Mathf.MoveTowards zu implementieren, aber es war nicht flexibel und nicht universell (und manchmal funktionierte es im Editor und auf dem Gerät anders). Jetzt versuche ich nicht, das Rad neu zu erfinden, ich genieße einfach iTween.
Es gibt Fallstricke in diesem Animationssystem, mit denen ich anfangs falsch gekämpft habe:
- Wenn während der Arbeit von iTween ein Objekt ausgeblendet wird ( z. B. über SetActive (false) ) und dann erneut angezeigt wird, wird iTween weiterhin an der unterbrochenen Stelle ausgeführt.
- Wenn Sie während des Betriebs eines iTween ein anderes starten (was sich auf dieselben Werte auswirkt), kehrt das Objekt am Ende der Ausführung von beiden möglicherweise nicht an seine ursprüngliche Position zurück.
- Sie müssen nachverfolgen, welches GameObject iTween startet und an welcher Animation es arbeitet.
Zum Beispiel (am letzten Punkt) startet Objekt A iTween so, dass es auf Objekt B funktioniert. Um die iTween-Animation zu stoppen, können Sie iTween.Stop () nicht einfach auf Objekt A starten. Sie müssen iTween.Stop (Objekt B) starten.
Die Stärke von iTween ist die Fähigkeit, verschiedene Arten der Lockerung zu verwenden. Ising ist ein Parameter, der die Bewegung weicher macht (damit sie nicht ruckartig beginnt und nicht dumm endet).
Ein großartiger Fund für mich sind die Arten von Ising:
- Frühling
- easyOutBounce
- easyInBack
- easyOutElastic
Um das richtige zu finden, verwende ich die visuelle Easing-Demo (ich brauche einen Blitz). Und hier nehme ich die Dokumentation für alle Arten von iTween-Animationen .
Apple- und Google-Statistiken sind gut, aber Unity Analytics ist besser
Selbst aus der Erfahrung vergangener Spiele wusste ich, dass es sehr cool ist, eigene Statistiken zu haben. Zuerst wollte ich eine Art Protokollierungssystem erstellen, aber dann erinnerte ich mich an Unity Analitics . Und was war meine Überraschung, als sich herausstellte, dass die kostenlose Version der Funktionalität für meinen Fall durch nichts eingeschränkt ist. Wenn ich eine Art Monetarisierung hätte, wäre es schlimmer, wenn Analysetools nur für Pro-Abonnenten verfügbar wären.
Durch einfaches Einbetten von Analytics.CustomEvent an der richtigen Stelle im Code kann ich nachverfolgen, welche Beispiele beliebter sind, wie viele Kinder Beispiele in den ersten Tagen oder nach einer Weile lösen usw.
Ich kann Daten von verschiedenen Plattformen (iOS und Android) an einem Ort vergleichen.
Und wie viele Dinge dort interessant sind, was ich gerne ausprobieren würde, aber nicht alle Hände erreichen. Geben Sie Remote Settings (Ändern des Inhalts der Anwendung ohne Aktualisierung) oder A / B Testing oder Tutorial Manager ein .
Visual Studio wie Sublime
In der Vergangenheit habe ich, wenn ich Code bearbeiten musste (sei es Python, HTML oder node.js), Notepad ++ (völlig kostenlos, aber nur unter Windows) und Sublime Text (für alle Betriebssysteme bezahlt, aber Sie können es kostenlos ausprobieren) verwendet )
In Unity saß ich auf MonoDevelop, aber er hatte mich so satt mit seinen Pannen (wie der Unfähigkeit, zwischen Layouts zu wechseln oder etwas außerhalb von Mono zu kopieren), dass ich entschied, dass es Zeit war, das sinkende Schiff fallen zu lassen und auf Visual Studio Community 2017 zu klettern (gut, Es ist kostenlos für einzelne Entwickler wie mich.
Für Entwickler unter Unity 2018 ist dies derzeit nicht relevant, da der plattformübergreifende Visual Studio-Code in der Version 2018 enthalten ist. Ich wollte jedoch, dass meine Anwendung unter iOS 7 funktioniert (da das iPhone meiner Tochter mit diesem iOS ausgestattet ist), daher musste ich jede Version von Unity verwenden, die älter als 2018 ist.
Es hat mir beim Übergang zu VS Video geholfen. So richten Sie Visual Studio mit Unity ein .
Von der Box hat VS nicht all die coolen Sachen, die ich in anderen Editoren gewohnt bin, also habe ich mein Leben vereinfacht:
- aktivierte die Minikarte anstelle einer einfachen vertikalen Schriftrolle:

- fügte die Erweiterung SemanticColorizer hinzu , die eine flexiblere Anpassung der Codefarben ermöglicht. Insbesondere brauchte ich es, um globale Variablen von lokalen Variablen nach Farbe zu unterscheiden.
- installierte Match Margin- Erweiterung, die das Wort unter dem Wagen und alle seine Kopien gemäß dem Text des Codes auswählt und dies auch auf der Minikarte tut. Dies ist sehr praktisch für die schnelle Code-Navigation, um alle Stellen zu finden, an denen eine Methode oder Variable verwendet wird:

Meine Skripte für diese App sind auf GitHub. Es gibt nur meine Skripte und nicht das gesamte Unity-Projekt - sorry, wenn dies das Verständnis unmöglich macht. Bis zum letzten Moment hatte ich nicht vor, einen Link zu den Quellen zu geben, da ich meinen Code nicht als so wertvoll betrachte. Aber dann hat er seine Meinung geändert, weil erfahrene Entwickler auf meine Fehler hinweisen konnten.
Dies ist das Ende des ersten Teils. Lesen Sie weiter im zweiten Teil , wo ich erzählen werde:
- Über das Schreiben von Code
- Informationen zur Versionskontrolle
- Über Sprachausgabe
- Über das Symbol
- Über Android Build
- Über Build für iOS
- Über den Titel und die Promotion
- Statistiken
- Was ich bereue
- Was verstanden
Referenzen
Liste der Links aus dem Hauptteil des Artikels in der Reihenfolge ihrer Erwähnung:
+
Einfache C # FTP-Klasse.+
Sitzungs-ID für iOS.+
Wir schreiben das Plugin für Unity korrekt. Teil 1: iOS .
+
Methoden zum Serialisieren von Objekten in JSON (offizielle Hilfe).
+
ScriptableObject (offizielle Hilfe).
+ Video-Tutorial
Spielarchitektur mit skriptfähigen Objekten (
Code ).
+ Workshop
Sturz der MonoBehavior-Tyrannei in einer glorreichen Revolution der skriptfähigen Objekte (
Code ).
+
Videodemonstration meiner Bewerbung im Editor .
+ Kostenloses
Anima2D-Plugin für die Skelettanimation von 2D-Zeichen .
+ Kostenlose Bibliothek zur Anwendungslokalisierung -
Lean Localization.+ Video über Tricks, die die Wahrnehmung des Spiels verbessern.
+ Video über unterschwellige Animationstechniken der Animation
Die Kunst des Screenshakes .
+ Kostenloses, aber leistungsstarkes
iTween- Animationssystem.
+ Visuelle
Demonstration von Ising-Typen (Blitz erforderlich).
+
iTween (offizielle Hilfe).
+
Unity Analitics .
+
Texteditoren Notepad ++ und
Sublime Text .
+
Visual Studio Community 2017 und
Visual Studio Code .
+ Video-Tutorial
So richten Sie Visual Studio mit Unity ein .
+ Plugin
SemanticColorizer (für Codefarbeneinstellungen).
+
Match Margin Plugin (wählt das Wort unter dem Wagen und alle seine Kopien aus).
+
Strip'em Plugin (automatische Korrektur von Zeilenenden).