Страница 1 из 2

ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 07:53
Neodrop
Спасибо камраду legven за наводку : http://www.codeplex.com/DotNetZip
Отличная и бесплатная дотнет библиотека для работы с ZIP архивами. Имеет кучу функционала, но проста как улыбка ребёнка.
Я неспешно прикрутил её к своему проекту за один час. Работает как часы.

К примеру, может пригодиться для запрятывания ресурсов в паролированные архивы. Это помимо архивации, конечно.

З.Ы. Поддерживает шифрование и 64 битные алгоритмы.

(3A4OT)

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 08:42
Mr_Anderson
Однозначно полезная вещь! Thanks ;)

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 10:40
Piatrouski
Твоё запароливание ничего не даст и контент-вор легко утащит весь твой контент :ymparty:

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 11:02
Neodrop
Оно не моё. А 256 битный ключ устанешь ломать. :-?

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 11:09
Neodrop
Тем более, я никакие "секретные ресурсы" компрессить не собираюсь. Украсть можно всё и замки лишь от добрых людей.

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 11:17
mp3
С такой вещью, можно позавидовать владельцам PRO.

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 11:27
Neodrop
Дотнет библиотеки подключаются к любой версии [unity 3D] Unity. Достаточно просто бросить её в папку Plugins.

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 11:53
Piatrouski
Neodrop писал(а):Оно не моё. А 256 битный ключ устанешь ломать. :-?

Нео, оно распаковывает в память и сразу потоком загружается в юнити? Или создается временную папку? Вот собственно ответ на твой вопрос о взломе 234534534 битного ключа. :o)

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 12:00
mp3
Neodrop писал(а):Дотнет библиотеки подключаются к любой версии [unity 3D] Unity. Достаточно просто бросить её в папку Plugins.

Тогда, огромный (3A4OT)

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 14:05
Mr_Anderson
Если только шифрование интересно, то можно и стандартными микрософтовскими System.Security.Cryptography (аналоги на моно не проверял!) средствами пользоваться.

Re: ZIP твой прожект!

СообщениеДобавлено: 23 дек 2009, 15:26
Neodrop
Мне как раз удавить нужно было.

Re: ZIP твой прожект!

СообщениеДобавлено: 19 июл 2011, 13:45
seaman
Сорри за некропост.
1. Вопрос по распаковке в поток.
Все бы хорошо, но вот можно ли как-то минуя создание временного файла загружать материалы (Material) из архива?
Материал можно создать из шейдера, из другого материала, а также загрузить из файла Resources.Load(путь). Как загрузить из потока я не могу сообразить. И возможно ли это вообще?
2. Можно, конечно, распаковать во временную директорию и уже оттуда грузить, но это имхо ненормально. Ну и ко всему прочему у меня и это не выходит.
Синтаксис:
Используется csharp
                        if (ext == ".zip")
                            _LoadZipMat(file, dir);
                        else if (ext == ".mat")
                            _LoadOneMat(dir, name);
...
    private static void _LoadOneMat(string dir, string name)
    {
        string f = dir + "/" + name;
        Debug.Log("Loading Mat: " + f);
        Material m = (Material)Resources.Load(f, typeof(Material));
        m.name = name;;
    }
    private static void _LoadZipMat(string file, string dir)
    {
        string path = Path.GetDirectoryName(file);
        using (ZipFile zip = ZipFile.Read(file))
        {
            foreach (ZipEntry e in zip)
            {
                e.Extract(path);
            }
        }
       
        string[] ret = Directory.GetFiles(path);
        foreach (string fil in ret)
        {
            string ext = Path.GetExtension(fil);
            string name = Path.GetFileNameWithoutExtension(fil);
            if(ext == ".zip") continue;
            if(ext != ".mat")
                Debug.LogWarning("Not supported file in Materials: " + fil);
            else
                _LoadOneMat(dir, name);
        }
    }


Материалы в конечном итоге грузятся одним методом - _LoadOneMat. Если они уже лежат в Resources/Materials, то прекрасно грузятся. Если там только архив, то распакованные то там появляются, а вот грузиться не хотят. Вылетает ошибка NullReference на строке m.name = name; Т.е. явно материал не загрузился. Причем распакованные материалы нормальные - их можно спокойно загрузить перезапустив Юнити. Т.е. получается что именно в момент попытки загрузки после распаковки что-то не то. Или их еще нет, или к ним почему-то нет доступа. Я именно поэтому сделал еще один цикл в _LoadZipMat - специально, чтобы распаковка уже точно прошла. Не помогло.
В _LoadOneMat в обоих случаях передаются одинаковые значения. Об этом четко говорит Debug.Log в ней.

В чем может быть дело?

ЗЫ: Полез я уже в File.GetAccessControl - хотел дать себе все права на файлы. Однако тут другое - Юнити пишет: в File нет такого метода, хотя VS нормально его находит, и он появился еще в DotNet 2.0! Что за фигня сегодня :( Нужно отложить все это. Потом с новыми силами браться...

Re: ZIP твой прожект!

СообщениеДобавлено: 19 июл 2011, 16:59
RomanW
seaman писал(а):Сорри за некропост.
1. Вопрос по распаковке в поток.
Все бы хорошо, но вот можно ли как-то минуя создание временного файла загружать материалы (Material) из архива?
Материал можно создать из шейдера, из другого материала, а также загрузить из файла Resources.Load(путь). Как загрузить из потока я не могу сообразить. И возможно ли это вообще?

Присоединяюсь к вопросу. Создание временных файлов не выход :(

Re: ZIP твой прожект!

СообщениеДобавлено: 19 июл 2011, 17:40
DbIMok
непонятно, почему вы решили, что можно (и нужно) зиповать материалы. это такие маленькие файлики с набором параметров и ссылкой на шейдер. зиповать имеет смысл что-то достаточно большое и хорошо сжимаемое. через Resources вы с результатом распаковки никак не поработаете. насчет временных файлов - распаковывайте в Stream.

Re: ZIP твой прожект!

СообщениеДобавлено: 19 июл 2011, 19:28
seaman
насчет временных файлов - распаковывайте в Stream.

Ну и? Распаковал в стрим. Как заставить Юнити оттуда взять материал? (Если считаете, что я не могу - я оттуда спокойно (из потока) беру меши - все работает)
можно (и нужно) зиповать материалы

На счет можно не знаю. Насчет нужно - а зачем вообще эта тема? Зачем вообще зиповать? (Кстати, если не пробовали - сжимаются они очень прилично.) Ну а может я хочу их зашифровать для защиты контента? А может мне не нравится сотня маленьких файликов - я хочу один? Да мало ли для чего. Вы бы лучше подсказали - как.
через Resources вы с результатом распаковки никак не поработаете

Почему не поработаю? Распаковал в папку Resources. Файл там лежит после распаковки. По идее - что мешает оттуда взять? Вот я не понимаю - почему нельзя сразу взять? Почему после повторного запуска игры те же самые распакованные при предыдущем запуске файлы спокойно берутся? Одна мысль - нет прав. Тогда вопрос - как установить права?