Unity54 Geschrieben 13. Juni 2020 Melden Share Geschrieben 13. Juni 2020 In einem Wörterspielprogramm gibt es 3 verschiedenen Wörterdateien (nomen,verben,adjektive). Diese sind relativ umfangreich, so 300-400 Wörter pro Datei. Für’s erste habe ich die Wörter Dateien als Arrays direkt in die Klasse geschrieben. Das Programm funktioniert so auch. Ich meine aber, dass alle 1200 Wörter somit geladen werden. Ich möchte jedoch die einzelnen Wort Dateien per Script aus den Assets (z.B. als nomen.txt) laden. Wäre das der richtige Weg, und wie könnte dies bewerkstellig werden? Wie müsste die txt Datei geschrieben, respektive geladen werden? public class textcontrol : MonoBehaviour { public int zNomen; string [] nomen = new string [] {"BAUER","HÜTTE","KIND","MANN","FRAU","ZAUBERER","FEE","TRAUM","APFEL","GIRAFFE","MAUS","TIGER","MUTTER", "VATER","SOHN","KOPF","HAUS","MAUS","BLEISTIFT","TINTE","AUTO","SCHWESTER","BILD","ZEICHNUNG","GLAS","LÖFFEL","MESSER","GABEL","TEE","DACH", "SONNE","STERN","WOLKE","GEBIRGE","EI","TUNNEL","BUTTER","TANNE","PULT","BUCH","HEFT","HAND","BEIN","BAUM","TRAUM","MOND","KOPF","KNOPF", "WURM","KAMEL","TURM","SCHUH","HUT","BETT"}; Wortliste1.txt Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 13. Juni 2020 Melden Share Geschrieben 13. Juni 2020 Gibt es viele Möglichkeiten. Hier eine fertige Klasse die du dafür verwenden kannst:https://wiki.unity3d.com/index.php/CSVReader using UnityEngine; using System.Collections; using System.Collections.Generic; public class ReadCSV : MonoBehaviour { public TextAsset csv; void Start () { string[,] output2D = CSVReader.SplitCsvGrid(csv.text); } } Wenn dir das 2D-Array nicht gefällt kann man es noch in ein 1dim-Array umwandeln. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 13. Juni 2020 Melden Share Geschrieben 13. Juni 2020 Ich hab mir mal die Mühe gemacht das Ergebnis des CSVReader in ein 1dim-Array zu übertragen. Deine Eingabedatei als "Wortliste.txt" in den Assets abspeichern und dann in den Slot "csv" des unteren Skriptes ziehen. Die Eingabedatei sollte dann so aussehen: "BAUER","H†TTE","KIND","MANN","FRAU","ZAUBERER","FEE","TRAUM","APFEL","GIRAFFE","MAUS","TIGER","MUTTER" Die CSV-Reader-Klasse muss auch existieren, meine Klasse verwendet diese! using UnityEngine; using System.Collections; using System.Collections.Generic; public class ReadCSV : MonoBehaviour { public TextAsset csv; void Start() { string[,] output2D = CSVReader.SplitCsvGrid(csv.text); string[] output1D = Output1D(output2D); foreach (string s in output1D) { Debug.Log(s); } } // Converts 2 dimensional string array to only 1 dimension static private string[] Output1D(string[,] grid) { // creates 1D string array string[] outputGrid = new string[grid.GetUpperBound(0) * grid.GetUpperBound(1)]; for (int y = 0; y < grid.GetUpperBound(1); y++) { for (int x = 0; x < grid.GetUpperBound(0); x++) { outputGrid[x+ (y * grid.GetUpperBound(0))] = grid[x, y]; } } return outputGrid; } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Unity54 Geschrieben 13. Juni 2020 Autor Melden Share Geschrieben 13. Juni 2020 Vorerst mal herzlichen Dank für die schnelle Hilfe. Es klappt leider noch nicht so recht, liegt aber an meinem Status (blutiger Unity-Anfänger) sorry! Ich habe die Wortliste.txt in den Assets abgespeichert. Eine Klasse namens ReadCSV erstellt und den Code kopiert und eingefügt. Nun wohin mit diesem Script? in den Skrips-Ordner oder in die Assets??? ..und dann in den Slot "csv" des unteren Skriptes ziehen ( dies habe ich nicht verstanden, wünsche eine genauere Erklärung. Ich bekomme im Moment die Fehlermeldung Assets/ReadCSV.cs(12,30): error CS0103: The name 'CSVReader' does not exist in the current context hängt vermutlich mit Slot zusammen? Noch unklar ist auch , wie das Array erstellt werden soll? string [] nomen = new string [] Wäre sehr dankbar für eine Finischlösung meines Problems Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 13. Juni 2020 Melden Share Geschrieben 13. Juni 2020 Ok der Reihe nach: 1) Das Skript in den script order unter deinen Assets 2) Der Fehler "Assets/ReadCSV.cs(12,30): error CS0103: The name 'CSVReader' does not exist in the current context" bedeutet, dass Unity die Klasse "CSVReader" noch nicht gefunden hat, also irgendwas stimmt also damit nicht, entweder falsch benannt oder falsch abgelegt. Ich hänge hier die Klasse CSVReader (und die beiden anderen Dateien) noch einmal als Anhang dran, dann musst du nur diese Dateien einfach in deinen Script-Ordner kopieren. Lösch am besten vorher die anderen CSV-Klassen und Eingabedateien weg. CSVReader.cs ReadCSV.cs Wortliste.txt Wenn die 3 Dateien dann in deinem Script-Folder sind, dann das Script ReadCSV auf ein GameObject in deiner Unityscene ziehen und die Datei "Wortliste" dann in den Slot dieses Skriptes. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 13. Juni 2020 Melden Share Geschrieben 13. Juni 2020 Das Ganze sieht dann so aus: PS: Das Array ist schon erstellt und heißt in der Klasse ReadCSV "output1D". Beim Start von Unity ließt er als Test dieses Array aus und schreibt das Ergebnis in die Log-Ausgabe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Juni 2020 Melden Share Geschrieben 14. Juni 2020 Ist das nötig, da direkt CSV drauf zu schmeißen? Wenn man die Wörter einfach in eine Liste packt, eins pro Zeile: AUTO WURST NASE und das in eine .txt-Datei speichert, dann ist das Auslesen hiermit getan: public TextAsset file; private string[] words; private void Start() { words = file.text.Split('\n'); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Unity54 Geschrieben 24. Juni 2020 Autor Melden Share Geschrieben 24. Juni 2020 Heute erst bin ich dazugekommen, Saschas Vorschlag zu implementieren und siehe da, wie zu erwarten war - es hat mal wieder super geklappt. Herzlichen Dank an Sascha für die kompetente Hilfestellung. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.