Hallo. Ich soll ein dynamisches Array serialisieren und in eine binäre Datei schreiben. Dabei sollen die Daten zum Test wieder zurückgelesen und die deserialisierten Werte als Liste ausgegeben werden. Ich habe auch schon ein Skript, aber leider funktioniert es nicht:
#pragma strict
//für den Typ List
import System.Collections.Generic;
//für den Namensraum System.IO
import System.IO;
//für den BinaryReader
import System.Runtime.Serialization.Formatters.Binary;
//für das Prefab
var prefabOutput : UI.Text;
public class ScoreItem implements System.IComparable {
private var points : int;
private var name : String;
public function ScoreItem (poi : int, nam : String) {
points = poi;
name = nam;
}
public function GetName() : String {
return name;
}
public function GetPoints() : int {
return points;
}
}
//die Liste
private var highscore : List.<ScoreItem> = new List.<ScoreItem>();
var Name : Array = new Array();
var Punkte : Array = new Array();
function Start () {
for (var index : int = 0; index < 10; index++) {
Name.Push ("Test");
}
for (var inde : int = 0; inde < 10; inde++) {
Punkte.Push (10);
}
//die Liste erstellen
highscore = new List.<ScoreItem>();
//einige Einträge erzeugen
highscore.Add(new ScoreItem(10, "Test"));
highscore.Add(new ScoreItem(20, "Test 1"));
//für die neuen Instanzen
var outputName : UI.Text;
var outputPoints : UI.Text;
//die Liste laden bzw. neu erzeugen
LoadList();
//Canvas beschaffen
var myCanvas = GameObject.Find("Canvas");
//und ausgeben
for (var temp : ScoreItem in highscore) {
outputName = Instantiate(prefabOutput);
//das übergeordnete Element setzen
outputName.transform.SetParent(myCanvas.transform, false);
//den Text setzen
outputName.GetComponentInChildren.<UI.Text>().text = temp.GetName();
//und noch einmal für die Punkte
outputPoints = Instantiate(prefabOutput);
outputPoints.transform.SetParent(myCanvas.transform, false);
outputPoints.GetComponentInChildren.<UI.Text>().text = temp.GetPoints().ToString();
}
}
function LoadList() {
//für den Dateinamen
var filename : String;
//für den FileStream
var myFileStream : FileStream;
filename = Path.Combine(Application.persistentDataPath, "highserial.bin");
//gibt es die Datei?
if (File.Exists(filename)) {
//eine neue Instanz von FileStream erzeugen
//die Datei wird zum Lesen geöffnet
myFileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
//eine Instanz von BinaryFormatter erzeugen
var binaryformat : BinaryFormatter = new BinaryFormatter();
//die Daten deserialisieren und in highscore ablegen
highscore = binaryformat.Deserialize(myFileStream) as List.<ScoreItem>;
myFileStream.Close();
}
//sonst 10 leere Einträge erzeugen
else {
for (var count : int = 0; count < 10; count++)
highscore.Add(new ScoreItem(0, "leer"));
}
}
function SaveList() {
//für den Dateinamen
var filename : String;
//für den FileStream
var myFileStream : FileStream;
filename = Path.Combine(Application.persistentDataPath, "highserial.bin");
//eine neue Instanz von FileStream erzeugen
//der Inhalt wird überschrieben
myFileStream = new FileStream(filename, FileMode.Create);
//eine Instanz von BinaryFormatter erzeugen
var binaryformat : BinaryFormatter = new BinaryFormatter();
//die List sortieren
highscore.Sort();
//die Daten speichern, dazu wird einfach die Liste serialisiert
binaryformat.Serialize(myFileStream, highscore);
myFileStream.Close();
}
function OnApplicationQuit() {
SaveList();
}
Kann mir jemand dabei helfen ?