2015-08-27 2 views
0

Я создаю программу, которая читает внешний текстовый файл после создания моего проекта единства. Журнал Debug может отлично читать внешний файл и отправлять обратно мой текст или обнаруживать, когда нет файла - моя единственная проблема заключается в переносе переменной txt в метку GUI? Мне было интересно, почему переменная String не передается правильно, поскольку она просто ничего не показывает. Любая помощь будет принята с благодарностью.String Variable не переносится на OnGUI() Label

void Start() { 
    StreamReader reader = null; 
    FileInfo theSourceFile = null; 

    theSourceFile = new FileInfo (Application.dataPath + "/puzzles.txt"); 
    if (theSourceFile != null && theSourceFile.Exists) 
     reader = theSourceFile.OpenText(); 

    if (reader == null) 
    { 
     Debug.Log("puzzles.txt not found or not readable"); 
    } 
    else 
    { 
     // Read each line from the file 
     while ((txt = reader.ReadLine()) != null) 
      Debug.Log("-->" + txt); 
    } 
} 

void OnGUI() 
{ 
    GUI.contentColor = Color.red; 
    GUI.Label(new Rect(500, 300, 400, 400), txt); 
} 
+0

Также добавить - переменная txt является общедоступной уже – Jaindreas

+0

Ну, давайте вернемся к запуску Start(), а затем ваш OnGUI(), цикл while в Start() установит текст в null, чтобы завершить работу. Следовательно, null будет передан в вызов метки. Просто поместите вызов Debug.Log (txt) внутри вашей функции OnGUI(). P.S.S. найдите, как использовать контрольные точки в отладчике. –

+0

Спасибо, что нашли время, чтобы помочь Нико! Хорошо, у меня уже был вызов метода OnGUI(), но это тоже не сработало? Что мне делать, чтобы остановить передачу null в вызов метки? – Jaindreas

ответ

0

Я думаю, вы неправильно поняли, как работает код выше. Похоже, вы ожидаете, что приведенный выше код покажет строки текстового файла до тех пор, пока он не будет прочитан полностью, однако метод Start() заканчивается перед любым вызовом метода OnGUI().

Среднее разрешение txt = reader.ReadLine() означает, что номер OnGUI ничего не показывает.

Если вы хотите показать текст выше, я предлагаю добавить еще одну переменную и поместить содержимое строки во вторичную переменную (в этом случае txt не обязательно будет переменной класса).

Небольшой образец, который может быть быстрее, используя StringBuilder:

String txt; 
completeText = ""; 
while ((txt = reader.ReadLine()) != null) 
{ 
    Debug.Log(....); 
    completeText += txt; 
} 

И в вашем OnGUI метод:

GUI.Label(new Rect(500, 300, 400, 400), completeText); 

Если вы хотите по какой-либо причине, чтобы показать каждую строку seperatly я предлагаю использовать сопрограмму с задержкой между каждым номером ReadLine.

+1

Вы, сэр, - абсолютная легенда! Это сработало для меня после того, как я добавил fullText + = txt! Мне следовало бы больше подумать о самих Методах, как о том, как работает функция Start(), но я не мог бы этого сделать без вас! Большое вам спасибо за ваш совет! – Jaindreas

+0

Жаль, что это раздражение, но для чтения между строками вы можете оказать вам дополнительную помощь? Итак, чтение текстового файла по строкам? Я пытался исследовать сопрограммы и использовал это. частный IEnumerator seperateText() { yield return new WaitForSeconds (1f); } Но это будет отрезать линии или отображать только одну строку? Спасибо. – Jaindreas

+0

В основном вы запускаете сопрограмму и помещаете в «WaitForSeconds» и присваиваете текст так, как вы делали это раньше, но снова используете txt в своей функции метки. –