Leader und Speichern von Daten - UnityGems

Einige der Informationen zu diesem Artikel werden auch in der Unity Tutorial, wie Datenpersistenz erläutert.

Dies ist der erste Teil einer Reihe. Um weiter zu demonstrieren, werden wir eine einfache lokale Rangliste entwickeln.







Die Verwendung von statischen ...

Ich werde mit einer Art und Weise beginnen halte ich für falsch, sondern nur um des Lernens und es hinter sich bringen, ich werde es beweisen.
Sie sollen wissen, dass eine Klasse als statisch definieren, bedeutet, dass Sie benötigen keine Instanz dieser Klasse in der Lage sein, es zu benutzen. Eigentlich kann man nicht eine statische Klasse instanziiert. Es befindet sich in einem anderen Teil des Anwendungsspeichers gespeichert und ist nicht sauber vom Garbage Collector.

Also, wenn es nicht sauber gemacht wird, bedeutet das, es ist immer da. Ja, von dem Moment machen Sie den ersten Anruf bis zum Schließen der Anwendung. Wenn wir einige Informationen speichern müssen, das könnte ein guter Ort sein. So können wir unsere Daten im Laufe der Zeit halten und über Szene. Aber halt, wie gesagt, wird es im Speicher gehalten, bis die Anwendung ausgeschaltet ist, so wird es nicht dort sein nächstes Mal, wenn Sie die Anwendung starten.

Nur wenige Daten zur Zeit, nichts Besonderes, wir wollen nur sehen, wie es funktioniert.
Da die Klasse als statisch definiert ist, benötigt keine Instanz, sondern auch, haben alle Mitglieder statisch sein. Es macht nur Sinn, da der Compiler nicht zu wissen, wäre in der Lage, welche Instanz Sie beschäftigen, da Sie eine nicht erstellen können. Beachten Sie, dass die High-Score ist privat und kann nur von innerhalb der Klasse festgelegt werden. den Spieler Wert Einstellung wird die hohe Punktzahl bei Bedarf automatisch eingestellt.

In unserem GameManager, wollen wir ein paar Informationen setzen:

Das ist also eine einfache Möglichkeit, unseren Wert über die gesamte Lebensdauer des Spiels zu halten.

Das Speichern auf einem lebenden Objekt

Die andere schnelle Art und Weise ist ein Gameobject zu verwenden, die wir als DontDestroyOnLoad gesetzt. Dies ist einen Schritt weiter, da wir in der Lage sind, um die Lebensdauer des Objekts zu steuern. Wenn wir es nicht brauchen, zerstören wir sie. Das war nicht möglich, mit statischer Klasse.

Diese Methoden sind nur demonstrativen der Tatsache, dass Sie das Objekt steuern. Auch dies ist nur so lange die Speicherung von Daten wie die Anwendung ausgeführt wird, es töten und du alles verlieren.

Mit PlayerPrefs

Wir können unsere Daten behalten, aber wir wollen es jetzt retten. PlayerPrefs wird auf der Dokumentation beschrieben und vielleicht der einfachste Weg, Ihre Leistungen zu sparen. Betrachten wir ein Checkpoint-System, das den Fortschritt spart:

Die PlayerPrefs speichert die Daten als Schlüssel-Wert-Paar (KVP) -System. Für einen bestimmten Schlüssel, einen Wert, wenn es zuvor gespeichert wurde. Aus diesem Grunde ist es notwendig, um sicherzustellen, dass der KVP existiert.






Betrachten wir Sie das Spiel starten und wollen ein paar Informationen abrufen:

Das Beispiel aussehen könnte komisch, aber das High-Score-Mitglied verfügt über einen privaten Setter. So setzten wir das Ergebnis eines Spielers, den Highscore und setzen Sie den Player wieder einzustellen. Ich verstehe, dass der Spieler-Score und Highscore sind wahrscheinlich die gleichen sein, wir sind hier, nur um zu sehen und zu lernen.

Mit diesem Code können Sie die App ausschalten, meine töten ich es total und es wieder auf und Ihre Daten gespeichert werden.

Also lassen Sie uns unsere Rangliste versuchen, sollten wir zuerst definieren, was es tun soll. Wir betrachten ein Rennen und am Ende jeder Rennfahrer erhält Punkte. Diese sollten die aktuelle Rangliste aktualisieren und dann wieder speichern.

Wir können nun jede Klasse die IRankable Schnittstelle implementiert. Lassen Sie uns eine grundlegende Implementierung Leaderboard sehen:

Wir bekommen einen Standardkonstruktor und eine SetRacers Methode. Diese letztere nimmt ein Array von IRankable und den Punkt hier ist, dass wir jede Art passieren kann, solange es die Schnittstelle implementiert. Der Datenstring wird verwendet, in PlayerPrefs zu speichern und abzurufen.

Also lassen Sie uns speichern und abrufen

Savedata ist generisch, weil wir in der Lage sein wollen, mehr als die Schnittstelle Inhalt zu speichern. Die Zwänge stellen Sie sicher, dass der angegebene Typ entspricht unsere Rahmenbedingung (IRankable) und die Methode Anforderung (Memorystream).

Sie schaffen eine BinaryFormatter und ein Memorystream. Die erste wird verwendet zum Serialisieren / deserialisieren, während die zweite als Speicherpuffer verwendet wird. Wir können dann die Puffer als Typ serialisiert werden, die gegeben wurde. Schließlich gehen wir den Puffer in einen String umgewandelt 64, die für das Verfahren PlayerPrefs requird wird.
Die GetDataArray Methode funktioniert die rückgängig gemacht Job.

Dies erfordert, dass die übergebene Klasse serialisiert werden muss.

Ein Problem gewarnt wird, gibt es keinen richtigen Weg, um zu überprüfen, ob eine Klasse vollständig serialisiert wird. Auch gibt es keine generische Einschränkung für die Serialisierung. Für die Serialisierung das Attribut arbeiten benötigt wird, und es dem Programmierer, um es zu gewährleisten. Es ist möglich, für die Serialisierung zu überprüfen:

Wir können jetzt mit unserem Leaderboard beenden:

Die beiden letzteren werden verwendet, Rennfahrer aus dem Array abzurufen. Sie könnten etwas mehr abrufen Rennfahrer durch Punkte, Index oder sogar mit dem Auto bietet einige zusätzliche Informationen hinzuzufügen.

Beachten Sie, dass keine dieser Klassen MonoBehaviour sind. Sie erfordern nicht die MonoBehaviour lifecyle und nicht wirklich den Inspektor verwenden. Das sind zwei Gründe, warum ich für nicht MB Kandidaten berücksichtigen

Lassen Sie uns auf unserer LeaderBoardManager bewegen, sollen wir? Dies ist der Verbraucher unserer Leaderboard-Klasse. Man könnte es ein Rennspiel-Manager betrachten, es racer schaffen wird, weisen einige Punkte und Auto, und schließlich werden wir die Punkte von drei zufälligen Rennfahrer ändern.

Im Start, wenn wir sie nicht alle Daten gespeichert haben, erstellen wir einen neuen Vorstand und sparen.
Im Update suchen wir Rennfahrer den Namen passend und einige Punkte hinzufügen. Dann drucken wir die neue Rangliste und speichern.

Schlussfolgerung

Dies stoppt hier für jetzt, werden im nächsten Schritt, den wir bei Xml und Json aussehen speichern. Denn jetzt, das ist es, und ich möchte auf dem Schnittstelle Abschnitt des Artikels betonen, die deutlich zeigen, wie flexibel die Klasse ist. Es ist leicht, unter allen Umständen wiederverwendet werden, und das ist nur möglich, generische und Schnittstellen.

Was unsere Daten, sind sie zu einem gewissen Grad sicher. Diese wird als binär in einem tiefen Abschnitt des Gerätes gespeichert. Also nicht nur, erfordert es ein paar kleine Änderungen an den Zugang, aber dann erfordert es ein Stück Code zurückzukehren. Aber wie wir es getan haben, ist es nicht unmöglich zu hacken, weit davon entfernt, nur ein wenig härter als Klartext auf dem Desktop.

Teile das:







In Verbindung stehende Artikel