2016-03-16 2 views
0

Я извлекаю некоторую информацию из нескольких текстовых файлов в разных папках. Для этого я создал приложение с несколькими полями ввода, чтобы написать имя папки, которое я хочу отправить. Все в порядке редакции.Unity3D: Поиск пути к папке при построении проекта

Однако, когда I создайте проект и запустите созданный файл .exe, он не сможет найти нужные текстовые файлы. Ниже я покажу код, который я использую для извлечения файлов. first data.path - это тот, который я использовал в своем редакторе, и работал хорошо, а второй (прокомментированный) data.path - это одно пробное задание, которое я попробовал, разместив мою папку в папке «.exe». Но это не сработало ...

data.motion = input_text; 
data.subjectName = input_text2; 

data.path = "C:/Users/Matias/Desktop/Acquisition_Data/Kinect1/" + data.subjectName + "/" + data.motion + ".txt"; 
/*data.path = Application.dataPath + "/Acquisition_Data/Kinect1/" + data.subjectName + "/" + data.motion + ".txt";*/ 

data.lines = System.IO.File.ReadAllLines(data.path); 

Я не могу объяснить, почему любой из этих методов работает при создании приложения.

Я использую C# и работаю на Windows10.

+0

вы можете использовать 'Application.persistentDataPath' и все. никогда не используйте ничего другого. – Fattie

ответ

1

Вы действительно не можете сделать это, потому что Unity кодирует файлы в двоичном формы и переименовывает их. Вы должны переместить txt-файл после сборки, тогда вы можете получить к нему доступ напрямую. Я ответил на такой же вопрос, как вчера, поэтому отправлю ссылку на ответ. Делайте то, о чем я упоминал в этом ответе ниже.

Unity3D loading resources after build

Затем удалитьTexture2D материал и заменитьFile.ReadAllBytes(imagePath); с System.IO.File.ReadAllLines(data.path); и что должно работать.

+0

Он должен мир. Это сработало для меня, работал другой человек, который задавал вопрос. Вы, наверное, что-то сделали. Приятно знать, что вы заработали. – Programmer

+0

Я следовал вашим указаниям, но он не работал в здании. Однако этот новый скрипт работает в редакторе после того, как я переместил папку Acquisition_Data в Assets. Кроме того, я не мог использовать ReadAllLines, поскольку вы предлагаете из-за байтов [], а не строки, поэтому я сделал: 'fileBytes = System.IO.File.ReadAllBytes (data.path);' then 'aux_string = System.Text.Encoding .Default.GetString (fileBytes); 'и, наконец,' data.lines = Regex.Split (aux_string, "\ r \ n"); ' – Fatias7

+0

" Я не мог использовать ReadAllLines, как вы предлагаете, из-за байтов [] и не строка, поэтому я сделал ».Вы должны сделать, чтобы немного изменить там, и это не связано. Также ReadAllBytes тоже работал бы, но так как вы использовали ReadAllLines в своем вопросе, я сказал вам изменить ReadAllBytes на ReadAllLines для текста. Я все еще думаю, что вы перенесли его в неправильную папку, и поэтому мой метод не работал для вас. Также вы можете изменить URL-адрес и изменить расширение на txt. Поскольку вы получили его работу, больше не о чем говорить. Поздравляю. – Programmer

0

Это проблема использования Относительного пути или использования абсолютного пути. Если абсолютный путь не работает, попробуйте относительный путь. например. ../name.txt

введите свое имя.txt в актив или где-нибудь вы можете указать.

0

Если ваши тексты являются статическими (никогда больше, никогда не меньше), то вы могли бы просто использовать TextAsset: http://docs.unity3d.com/ScriptReference/TextAsset.html

  1. Сделать Prefabs из текстовых активов;
  2. Поместите сборные плиты в вашу сцену;
  3. Позвольте пользователю, какой сборник (ы) загружает текст (ы) из.
Смежные вопросы