2013-06-24 21 views
5

Jemand bitte helfen! Das ist wirklich verwirrend für mich. Ich kann niemanden im Internet finden, der das gut genug erklären kann. Also hier ist, was ich brauche: Ich brauche jemanden, der erklärt, wie man eine XML-Datei in Unity erstellt. Die Leute haben mir gesagt, ich solle einen Stromschreiber anschauen. Ich habe nach diesem gesucht, aber niemand hat eine Anleitung gegeben, wie man es schreibt. Ich weiß auch nicht, was ein .NET ist, bitte geben Sie mir das nicht als Antwort. Ich habe auch die Microsoft-Seite nach XML-Dateien durchsucht, aber ich kann die richtige Antwort nicht finden. Das ist buchstäblich alles, was ich bin auf der Suche nach:Wie schreibe ich eine XML-Datei in C# in Unity?

Ich möchte so etwas zu schreiben in der Lage sein:

<Player> 

    <Level>5<\Level> 
    <Health>500<\Health> 

<\Player> 

Wie kann ich eine Datei wie diese machen und es zu Unity importieren? Wie kann ich Unity dazu bringen, diese Datei zu lesen und Informationen aus so etwas zu extrahieren? Bitte ich bin insgesamt N00b bei dieser ganzen .NET und XML-Sache.

Antwort

14

Sagen Sie bitte eine Spieler Klasse, die wie folgt aussieht:

[XmlRoot] 
public class Player 
{ 
    [XmlElement] 
    public int Level { get; set; } 

    [XmlElement] 
    public int Health { get; set; } 
} 

Dies ist die komplette Hin- und Rückfahrt zum Einstieg:

XmlSerializer xmls = new XmlSerializer(typeof(Player)); 

StringWriter sw = new StringWriter(); 
xmls.Serialize(sw, new Player { Level = 5, Health = 500 }); 
string xml = sw.ToString(); 

Player player = xmls.Deserialize(new StringReader(xml)) as Player; 

xml ist:

<?xml version="1.0" encoding="utf-16"?> 
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Level>5</Level> 
    <Health>500</Health> 
</Player> 

Und Sie raten player ist genau das gleiche wie das ursprüngliche Objekt, das wir serialisiert haben.

Wenn Sie möchten/Serialisierung von Dateien deserialisieren Sie so etwas wie tun:

using (var stream = File.OpenWrite("my_player.xml")) 
{ 
    xmls.Serialize(stream, new Player { Level = 5, Health = 500 }); 
} 

Player player = null; 
using (var stream = File.OpenRead("my_player.xml")) 
{ 
    player = xmls.Deserialize(stream) as Player; 
} 

EDIT:

WENN Sie wollen genau das XML Sie zeigen:

XmlSerializer xmls = new XmlSerializer(typeof(Player)); 

XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
ns.Add("", ""); 
XmlWriterSettings settings = new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true }; 
using (var stream = File.OpenWrite("my_player.xml")) 
{ 
    using (var xmlWriter = XmlWriter.Create(stream, settings)) 
    { 
     xmls.Serialize(xmlWriter, new Player { Level = 5, Health = 500 }, ns); 
    } 
} 

Player player = null; 
using (var stream = File.OpenRead("my_player.xml")) 
{ 
    player = xmls.Deserialize(stream) as Player; 
} 
+0

Ok das ist interessant. Bitte erläutern, was ist serialisieren und deserialisieren? Danke und tolle Antwort – Abraham

+0

Kannst du bitte auch diese Teile erklären: xmls.Serialize (sw, neuer Player {Level = 5, Health = 500}); Zeichenfolge xml = sw.ToString(); Player Player = xmls.Deserialize (neuer StringReader (xml)) als Player; – Abraham

+1

* Serialize * erzeugt die XML-Darstellung Ihrer Objekte. * Deserialize * macht das Gegenteil: erzeugt Objekte aus ihrer XML-Repräsentation. – Pragmateek