Jump to content
Unity Insider Forum

Dynamisches Array


Dami1302

Recommended Posts

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 ? 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...