Jak odczytać dane z pliku tekstowego w jedności

14

Czy ktoś może mi pomóc z podaniem kroków potrzebnych do odczytu danych z pliku tekstowego w jedności i jak można dodać skrypt.

użytkownik1509674
źródło
Czy plik tekstowy jest zasobem (częścią twojego projektu Unity) czy znajduje się w systemie plików?
Kelly Thomas
znajduje się w systemie plików. Umieściłem mój plik na dysku E i użyłem następującego kodu `import System.IO; var filename = "data.txt"; funkcja Start () {var sourse = new StreamReader (Application.dataPath + "/" + filename); var fileContents = sourse.ReadToEnd (); sourse.Close (); var lines = fileContents.Split ("\ n" [0]); for (linia w linii) {print (linia); }} `
user1509674
VTC jako nie specyficzne dla gry. IO to programowanie ogólne, powinno być na przepełnieniu stosu, a nie GameDev.
Gnemlock,
Przyjęta odpowiedź nie jest specyficzna dla Jedności, ale najwyższa głosowana odpowiedź (które imo powinno zostać zaakceptowane) jest specyficzna dla Jedności.
jhocking

Odpowiedzi:

8

Wersja C #.

using System.IO;

void readTextFile(string file_path)
{
   StreamReader inp_stm = new StreamReader(file_path);

   while(!inp_stm.EndOfStream)
   {
       string inp_ln = inp_stm.ReadLine( );
       // Do Something with the input. 
   }

   inp_stm.Close( );  
}

EDYCJA: (Naprawiono błąd w linii 9; zmieniono „stm.ReadLine ();” na „inp_stm.ReadLine ();”)

użytkownik43609
źródło
27

Istnieje klasa o nazwie TextAssets, która jest używana do odczytu plików tekstowych. http://docs.unity3d.com/Manual/class-TextAsset.html Tutaj znajdziesz obsługiwany format pliku.

Więc jeśli chcesz odczytać plik tekstowy, skrypt wyglądałby tak:

class YourClassName : MonoBehaviour{
    public TextAsset textFile;     // drop your file here in inspector

    void Start(){
        string text = textFile.text;  //this is the content as string
        byte[] byteText = textFile.bytes;  //this is the content as byte array
    }
}

lub możesz przeczytać tekst jako taki zasób:

TextAsset text = Resources.Load("YourFilePath") as TextAsset;
słuchać
źródło
7
Warto również wspomnieć, że TextAssetpytanie to powinno być prawdopodobnie umieszczone w Assets/Resourcesfolderze. To jest najbardziej poprawna odpowiedź, ponieważ wszystkie inne odpowiedzi wydają się ignorować fakt, że jest to w obrębie Jedności. Są poprawnymi sposobami odczytu pliku w języku C #, ale ignorują takie rzeczy, jak wdrażanie i ścieżki między platformami.
McAden
1
Jeśli używasz TextAsset, możesz przeciągnąć odwołanie do MonoBehaviour i użyć właściwości yext. W takim przypadku nie musi być w Respurces
Rakka Rage
4

Możesz to zrobić w taki sam sposób, jak w .NET

string word = File.ReadAllText(txtFilePath);

Tego fragmentu kodu można następnie użyć w dowolnej lokalizacji.

rh8938
źródło
2

Ten kod działa dobrze dla mnie, aby odczytać zawartość pliku tekstowego

import System.IO;

var filename="data.txt";

function Start () {
    var sourse=new StreamReader(Application.dataPath+"/" + filename);
    var fileContents=sourse.ReadToEnd();
    sourse.Close();
    var lines=fileContents.Split("\n"[0]);
    for(line in lines) {
        print(line);
    }
}
użytkownik1509674
źródło