Unity работа с файлами

Всем доброго времени суток, знаю что я давно ничего не писал, некоторые думаю думали что я забросил сайт. Какое то время действительно так и было. Не до того было мне. В реале свои заботы, покращення, да у нас в стране вообще покращення на покращенни, тфу блин язык сломаю. Мы тут двигаемся в цивилизацию, от газа к дровам, хорошо бы еще от электричества к керосиновым лампам перейти, и вполне серьезно нам тут по телевизору, который я почти не смотрю? рассказывают что дрова это альтернативное топливо. Ладно это у меня нервы, нафиг этих политиков.

 

Я снова мучаю игровой движок Unity3d и сегодня рассмотрю работу с файлами в unity. Тема достаточно важная и нужная. По крайней мере для меня. Файлы в играх используются очень часто. К примеру сохранение.

 

Что такое файлы думаю никому объяснять не нужно, находятся они у нас в папке New Unity Project, а сама эта папка находится там где вы создали свой проект. Для начала давайте создадим файл в нашем проекте при помощи скрипта. Открываем Unity3d и пишем скрипт создания файла.

 

Скрипт создания файла я назвал не особо сложно, FileWorks. Создавал его в папке с создаваемой игрой, вместе с остальными скриптами, а создаваться после работы такого скрипта файл будет в основной папке. То есть? на данный момент это не важно совершенно. И первое что нам необходимо сделать в файле, это подключить библиотеку для работы с файлами, поэтому пишем using System.IO; далее в функции Start мы создаем проверку информации о файле, FileInfo f и собираем информацию о файле = new FileInfo («my file.txt») который еще не существует. Следующей строкой мы если файл не существует if (!f.Exists) создаем его f.Create () то есть, строка вот такого вида if (!f.Exists) f.Create (); создаст именно тот файл о котором мы собирали информацию, то бишь файл который мы назвали «my file.txt» и общий скрипт должен принять вот такой вид.

Создаем файл скриптом
Dante

Как можете видеть на скриншоте у меня появился файл my file.txt, я его даже кружочком обвёл.

Созданный скриптом файл
Dante

Вот теперь мы знаем что файлы создаются, это хорошо. Еще можно файлы удалять, давайте в строку скрипта, добавим еще и удаление нашего файла. Все в той же функции Start после скрипта создания файла, пишем скрипт удаления этого файла. Для начала проверяем что файл существует if (f.Exists) как видите практически так же как и проверка выше что файл не существует, разница только в том что здесь нет восклицательного знака, а затем непосредственно само удаление файла f.Delete (); и всё это выглядит вот так.

Удаление файла скриптом
Dante

Теперь посмотрим, действительно ли файл удален?

Файл удален при помощи скрипта
Dante

Действительно, здесь созданный наш файл отсутствует. Значит все работает. С этим разобрались, продолжим.

 

Давайте теперь рассмотрим функцию записи информации в файл, точнее для начала мы напишем функцию, которая будет все переписывать и делать свою запись в файл. Начнём, для начала закоментируем строку с удалением файла, и допишем в файле в функции Update, действия записи в наш файл, сделаем запись по левой кнопке мыши. Итак записываем если нажата левая кнопка мыши if(Input.GetMouseButtonDown(0)){ мы создаем поток информации StreamWriter sw = new StreamWriter(«my file.txt»); как видите этот поток информации направлен в файл «my file.txt». Следующей строкой стираем текст который был в файле и записываем свой текст sw.WriteLine(«первая запись в файл»); в файл будет записана запись «первая запись в файл». И следующей строкой закрываем файл sw.Close();. И не забываем закрывать файл, а то тоже будете сидеть и смотреть в код несколько часов и не понимать что же не так. Весь код выглядит подобным образом.

Перезаписываем файл скриптом
Dante

Дальше запишем функцию для не перезаписывания, а дописывания в файл. Пишем в код файла, если нажата правая кнопка мыши if(Input.GetMouseButtonDown(1)){ создаем поток информации StreamWriter sw; объявлять поток нам здесь не нужно, так как дальше мы собираем информацию о файле FileInfo f = new FileInfo («my file.txt»); и поток информации который мы создали приравниваем к этой собранной информации sw = f.AppendText (); и дальше дописываем запись в конец файла sw.WriteLine («вторая запись в файл»); теперь закрываем файл. Должен получится вот такой код.

Дописывание текста в файл
Dante

Теперь сохраняем файл и запускаем Unity3d, и при нажатии левой кнопки мыши файл будет переписываться фразой «первая запись в файл» при чем все что было до нажатия левой кнопки мыши из файла будет стерто, а при нажатии правой кнопки мыши запись «вторая запись в файл» будет добавляться в конец файла. Проверьте сами. Да не забываем закрывать поток информации sw.Close();, а то будет выдавать ошибку и будете долго искать что к чему.

 

Теперь рассмотрим возможность считывания информации из файла, пишем если нажата средняя кнопка мыши if (Input.GetMouseButtonDown (2)) { создаем поток считывания информации из файла StreamReader sr = new StreamReader («my file.txt»); как видно название потока мы задали sr, дальше объявляем пустую строку string str = «»; и запускаем цикл while то бишь задаем условие когда срабатывает считывание. Пока не дошло до конца файла (!sr.EndOfStream) { выполняется условие str += sr.ReadLine (); прибавляется считанная строка и прибавляется пустая строка str += » «; по условию прекратиться считывание как только скрипт дойдет до конца файла как я сказал выше (!sr.EndOfStream) {. Ну и закрываем поток считывания sr.Close (); и выводим строку в консоль Debug.Log (str); чтоб было наглядней. Весь код выглядит следующим образом.

Считываем информацию из фалйа скриптом
Dante

Посмотрите что показывает консоль Unity3d, станет понятнее как это работает. В дальнейшем это все нам понадобится для создания сохранений, чекпоинтов и иных полезных вещей во время разработки игр. Хочется верить что это было полезным не только мне. До новых статей.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *