Save/Load mit txt, 1: Speichern
Hallo,
ich beschäftige mich heute mit dem speichern in Unity mit einer Textdatei.
Textdatei? Das ist doch dieser Krampf, der nix kann!
Von wegen!
Zunächst einmal schauen wir uns eine beliebige Textdatei an, oder öffnen eine neue. Wie im Namen schon enthalten, kann eine Textdate nur Text enthalten, also Zahlen, Buchstaben und Zeichen.
Wie jetzt? Unsere drei Grundvariablen sind doch auch nur Buchstaben oder Zeichenketten!
Also Variablen in einer *.txt schreiben? Ja, ganz genau!
[quote]
Was ist mit Vector3, boolean, etc?
Ja, auch die könnten wir schreiben. Aber die einzige Schwierigkeit in einer txt ist das Lesen, nicht das Schreiben. Bei lesen aus einer txt wird nämlich alles aus String ausgegeben. Während wir Zahlen mit dem ParseInt oder ParsFloat wieder zurückkonvertieren können, wirds mit Vektoren oä schwierig.
[/quote]
Aber wie fangen wir jetzt an? Zunächst einmal bauen wir uns eine Szene mit einem FirstPersonController und einer Plane (nicht vergessen: Main Camera löschen)
Dann setzen wir den FPC auf die Plane und erstellen dann ein neues JavaScript, ich nenne es [b]SaveLoad.js[/b]
Dann öffnen wir das Script und haben folgendes:
[CODE]
#pragma strict
function Start () {
}
function Update () {
}
[/CODE]
Wie können wir nun aber ein File schreiben?
Dazu hilft der namespace [b]System.Io[/b]
Der MSDN sagt dazu:
[quote]
Der System.IO-Namespace enthält Typen, die das Lesen und Schreiben für Dateien und Datenstreams zulassen, sowie Typen, die grundlegende Unterstützung für Dateien und Verzeichnisse bieten.
[/quote]
Also nur diesen Namespace importiern und auf die Funktionen zugreifen? Ja, ganz genau!
Also fügen wir unter dem #pragma hinzu:
[CODE] import System.IO;[/CODE]
Danach löschen wir die Funktionen Update und Start und fügen folgende drei hinzu:
[CODE] #pragma strict
import System.IO;
function WriteFile () {
}
function ReadFile () {
}
function OnGUI() {
}[/CODE]
über das GUI wollen wir auf unsere Funktionen zugreifen, also machen wir zwei Buttons:
[CODE] function OnGUI() {
if(GUI.Button(Rect (0,0,150,50),"Save")){
WriteFile();
}
if(GUI.Button(Rect (0,50,150,50),"Load")){
ReadFile();
}
}[/CODE]
Ok, so weit, so einfach.
Jetzt überlegen wir, was wir speichern wollen.
Ich nehme hier jetzt einfach nur die Spielerposition.
Dafür brauchen wir den [url="http://msdn.microsoft.com/de-de/library/system.io.streamwriter.aspx"]StreamWriter[/url]
Mit ihm können wir eine txt mit einem Namen in einen von uns gewählten Pfad speichern.
Also schreiben wir folgendes:
[CODE] #pragma strict
import System.IO;
var Player: Transform;
function WriteFile () {
//wir öffnen einen neuen StreamWriter
var sw : StreamWriter = new StreamWriter(Application.dataPath +"/Savegame.txt");
//drei Zeilenschreiben: position x,y,z
sw.WriteLine(Player.position.x);
sw.WriteLine(Player.position.y);
sw.WriteLine(Player.position.z);
sw.Flush();
sw.Close(); //damit schliessen wir den StreamWriter
}
function ReadFile () {
}
function OnGUI() {
if(GUI.Button(Rect (0,0,150,50),"Save")){
WriteFile();
}
if(GUI.Button(Rect (0,50,150,50),"Load")){
ReadFile();
}
}
[/CODE]
Application Datapath ist der Pfad, wo unsere zukünftige *.exe ist.
Wenn wir das jetzt in unsere Szene hinzufügen und die variable Player assignen, dann auf Save klicken, wird eine neue txt importiert mit unseren drei Positionen.
Das war der erste Teil des Speichern und Ladens via txt.
Es folgt auf jeden Fall noch laden und später vielleicht noch verfeinern mit Ordnern und eigenen Namen des Savegames etc.
Bis dahin:
Hoffe, es war ein erstes gutes Tutorial und hat euch was gebracht!
Xenes
ich beschäftige mich heute mit dem speichern in Unity mit einer Textdatei.
Textdatei? Das ist doch dieser Krampf, der nix kann!
Von wegen!
Zunächst einmal schauen wir uns eine beliebige Textdatei an, oder öffnen eine neue. Wie im Namen schon enthalten, kann eine Textdate nur Text enthalten, also Zahlen, Buchstaben und Zeichen.
Wie jetzt? Unsere drei Grundvariablen sind doch auch nur Buchstaben oder Zeichenketten!
Also Variablen in einer *.txt schreiben? Ja, ganz genau!
[quote]
Was ist mit Vector3, boolean, etc?
Ja, auch die könnten wir schreiben. Aber die einzige Schwierigkeit in einer txt ist das Lesen, nicht das Schreiben. Bei lesen aus einer txt wird nämlich alles aus String ausgegeben. Während wir Zahlen mit dem ParseInt oder ParsFloat wieder zurückkonvertieren können, wirds mit Vektoren oä schwierig.
[/quote]
Aber wie fangen wir jetzt an? Zunächst einmal bauen wir uns eine Szene mit einem FirstPersonController und einer Plane (nicht vergessen: Main Camera löschen)
Dann setzen wir den FPC auf die Plane und erstellen dann ein neues JavaScript, ich nenne es [b]SaveLoad.js[/b]
Dann öffnen wir das Script und haben folgendes:
[CODE]
#pragma strict
function Start () {
}
function Update () {
}
[/CODE]
Wie können wir nun aber ein File schreiben?
Dazu hilft der namespace [b]System.Io[/b]
Der MSDN sagt dazu:
[quote]
Der System.IO-Namespace enthält Typen, die das Lesen und Schreiben für Dateien und Datenstreams zulassen, sowie Typen, die grundlegende Unterstützung für Dateien und Verzeichnisse bieten.
[/quote]
Also nur diesen Namespace importiern und auf die Funktionen zugreifen? Ja, ganz genau!
Also fügen wir unter dem #pragma hinzu:
[CODE] import System.IO;[/CODE]
Danach löschen wir die Funktionen Update und Start und fügen folgende drei hinzu:
[CODE] #pragma strict
import System.IO;
function WriteFile () {
}
function ReadFile () {
}
function OnGUI() {
}[/CODE]
über das GUI wollen wir auf unsere Funktionen zugreifen, also machen wir zwei Buttons:
[CODE] function OnGUI() {
if(GUI.Button(Rect (0,0,150,50),"Save")){
WriteFile();
}
if(GUI.Button(Rect (0,50,150,50),"Load")){
ReadFile();
}
}[/CODE]
Ok, so weit, so einfach.
Jetzt überlegen wir, was wir speichern wollen.
Ich nehme hier jetzt einfach nur die Spielerposition.
Dafür brauchen wir den [url="http://msdn.microsoft.com/de-de/library/system.io.streamwriter.aspx"]StreamWriter[/url]
Mit ihm können wir eine txt mit einem Namen in einen von uns gewählten Pfad speichern.
Also schreiben wir folgendes:
[CODE] #pragma strict
import System.IO;
var Player: Transform;
function WriteFile () {
//wir öffnen einen neuen StreamWriter
var sw : StreamWriter = new StreamWriter(Application.dataPath +"/Savegame.txt");
//drei Zeilenschreiben: position x,y,z
sw.WriteLine(Player.position.x);
sw.WriteLine(Player.position.y);
sw.WriteLine(Player.position.z);
sw.Flush();
sw.Close(); //damit schliessen wir den StreamWriter
}
function ReadFile () {
}
function OnGUI() {
if(GUI.Button(Rect (0,0,150,50),"Save")){
WriteFile();
}
if(GUI.Button(Rect (0,50,150,50),"Load")){
ReadFile();
}
}
[/CODE]
Application Datapath ist der Pfad, wo unsere zukünftige *.exe ist.
Wenn wir das jetzt in unsere Szene hinzufügen und die variable Player assignen, dann auf Save klicken, wird eine neue txt importiert mit unseren drei Positionen.
Das war der erste Teil des Speichern und Ladens via txt.
Es folgt auf jeden Fall noch laden und später vielleicht noch verfeinern mit Ordnern und eigenen Namen des Savegames etc.
Bis dahin:
Hoffe, es war ein erstes gutes Tutorial und hat euch was gebracht!
Xenes
13 Kommentare
Recommended Comments