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

Части и запчасти к проектам, дополнительное программное обеспечение.

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

Сообщение DbIMok 19 июл 2011, 23:12

по поводу прав могу предположить следующее: файлы заняты другим процессом. например, распаковщиком. т.е. чтобы доступ к ним появился, нужно завершить блокирующий их процесс.
насчет доступа к ресурсам, если я правильно вас понимаю, дело происходит так (без отвлечения на zip/unzip):
1. делаем пустой проект, кидаем в сцену шарик
2. создаем/копируем в Resources Plane.asset
3. пишем скрипт типа:
Синтаксис:
Используется csharp
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
        void Start ()
    {
                Mesh m = Resources.Load("Plane") as Mesh;
                if (m != null)
                {
                        MeshFilter mf = gameObject.GetComponent<MeshFilter>();
                        mf.mesh = m;
                }
    }
}

4. вешаем скрипт на шарик, убеждаемся, что меш при запуске заменяется на плейн
5. перемещаем Plane.asset куда_то_там_за_пределы_проекта
6. убеждаемся, что в таком виде в редакторе шарик плейном не заменяется
7. делаем билд
8. в папку _Data/Resources копируем Plane.asset
9. запускаем билд, видим, что шарик не изменился
на этом мои эксперименты зашли в тупик. жду пояснений/подобного тестового примерчика, чтобы увидеть, что Resources.Load грузит что-то из соотв. папки положенное отдельными файлами (меши, материалы, префабы, текстуры не важно). потом, когда работающий пример будет, можно будет смотреть на распаковку этих ресурсов откуда-то в данную папочку. хотя, интерес конечно праздный. никто в коммерческом софте не пропустит прогу, пишушую что-либо в папку установки, а не в профиль пользователя. но для каких-то поделок может быть интересно.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение seaman 20 июл 2011, 08:16

1.
в папку _Data/Resources копируем Plane.asset

Если Вы сохраняли не в каком-то своем формате, то вот это лишнее. Если в папке Resources есть какие-то ассеты, которые Юнити понимает, то при построении проекта образуется файл resources.assets, который содержит все эти asset-ы из папки проекта Resources.
2. Я не понимаю, почему у Вас не работает. Все работает просто замечательно. (Были бы сомнения! :) ) Если бы не работало вообще зачем нужен был бы Resource?
Вот вам веб версия:
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://my3ds.zoxt.net/Unity/cstest.html&w=640&h=480&t=false&preview=1' height='"+(480+30)+"' width='640' frameborder='0' scrolling='no'></iframe>"); </script>

Нажимаете на Q - невидимому объекту присваивается меш - куб, на Z - сфера.
Скрипт загрузки:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class makemesh : MonoBehaviour
{
    private GameObject go;
    private MeshFilter mff;


        // Use this for initialization
        void Start ()
    {
            go = new GameObject("Load");
            go.AddComponent<MeshFilter>();
            mff = go.GetComponent<MeshFilter>();
            go.AddComponent<MeshRenderer>();
            (go.GetComponent<MeshRenderer>()).material = (Material)Resources.Load("Mat1");
            go.transform.position = Vector3.zero;
            go.transform.rotation = Quaternion.identity;
    }
       
        // Update is called once per frame
        void Update ()
    {
            if(Input.GetKey(KeyCode.Q))
                mff.mesh = (Mesh) Resources.Load("Cube");
        if (Input.GetKey(KeyCode.Z))
            mff.mesh = (Mesh) Resources.Load("Sphere");
    }
}


Более того, как видно при старте я ему присваиваю загружаемый материал.
Последний раз редактировалось seaman 20 июл 2011, 12:55, всего редактировалось 1 раз.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение gnoblin 20 июл 2011, 11:41

а где в примере ZIP?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение seaman 20 июл 2011, 12:54

Я отвечал на предыдущий пост, а там:
без отвлечения на zip/unzip

Тем более, если бы я смог Resources.Load-ером загрузить из зипа вообще никаких проблем бы не было. :-?

PS: исправил тег у плейера - сорри :(
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение DbIMok 20 июл 2011, 14:30

seaman писал(а):Если в папке Resources есть какие-то ассеты, которые Юнити понимает, то при построении проекта образуется файл resources.assets, который содержит все эти asset-ы из папки проекта Resources.

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

я эту фразу понял так: в билде мы распаковываем зип с ассетами в папку Resources и грузим их пофайлово через Resources.Load. объясните подробно, какой настоящий смысл этой фразы. какие файлы откуда и в какой момент берутся.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение seaman 20 июл 2011, 15:02

1. С помощью DotNetZip распаковываем все нужные файлы в Resources (сам не хочу, но приходится - иначе материалы не загрузить). Они там появляются - я их в проводнике отлично вижу.
2. string[] ret = Directory.GetFiles(path) - получаем список фалов, которые только что распаковали.
3. foreach (string fil in ret) ... Material m = (Material)Resources.Load(f, typeof(Material)); - пытаемся их загрузить
4. Для проверки тут же пробуем менять имя загруженного материала m.name = name; (Ну можно просто проверить на null загруженный материал)
Вылетает ошибка - nullreference. Т.е. Resources.Load на самом деле нам вернуло null.
5. Останавливаем игру. С файлами в Resources ничего не делаем. Т.е. там лежит архив и распакованные на предыдущем запуске игры файлы.
6. Снова запускаем игру. Ошибок нет. По логу видно, что наши распакованные материалы нормально загрузились.

Вот и возникает вопрос - почему при первом запуске сразу после распаковки они не загружаются, а при втором те же самые материалы загружаются?
То что они есть на момент загрузки очевидно, иначе мы бы не смогли получить их в списке Directory.GetFiles.
Значит либо нет прав - тогда откуда они появляются при втором запуске.
Либо файлы заняты другим процессом. Скорее всего - архиватором. Однако я не зря использую using (ZipFile zip = ZipFile.Read(file)) Вроде после закрытия скобки все ресурсы должны освободиться.
Еще одно может быть - в разные места загрузки передаем разные пути поиска файлов (в Resources.Load) Когда грузим из архива - неверный путь. Проверял дебагом - путь одинаков. Да и метод загрузки на самом деле один (см. код на первой странице).

Итого - четыре предположения - почему не грузится, и вроде все отверг. Не понимаю в чем дело :(

Если получится попробую вечером сделать какой-нибудь простенький проект и выложить на обозрение.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение DbIMok 20 июл 2011, 15:16

seaman писал(а):1. С помощью DotNetZip распаковываем все нужные файлы в Resources

в папку _Data/Resources, в билде. так?
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение seaman 20 июл 2011, 15:19

Нужно так, но сейчас я проверяю в папку Assets\Resources\ в редакторе.
Сейчас попробую сделать билд.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение DbIMok 20 июл 2011, 15:26

судя по моему тесту ясно, что в билде это не сработает. почему работает при повторном запуске в редакторе тоже понятно, [unity 3D] перед вторым запуском импортирует распакованные при первом запуске ресурсы.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение seaman 20 июл 2011, 15:38

Мда. Что -то я точно не понимаю. Тот мой пост - не показатель. Я еще раз проверил - там меши и материал берутся из resources.assets.

Но вот рабочий проект вроде показатель
В билде - кладу материалы - грузится, убираю - не грузится. Т.е. вроде четко берутся оттуда.

Сейчас еще раз все буду проверять.

Ну вот сделал билд с разархивированием материалов - выдало совсем другую ошибку, чем в редакторе. Теперь почему то DotNetZip не хочет их распаковывать. Пишет:
ArgumentException: Encoding name 'IBM437' not supported
An exception was thrown by the type initializer for Ionic.Zip.ZipFile

В редакторе такого не было :-?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение DbIMok 20 июл 2011, 15:58

seaman писал(а):Все в билде работает, если не распаковывать.

это всем понятно и сомнения не вызывает. если в редакторе поместить ассеты в папку Resources, к ним можно обратиться через Resources.Load. но при чем тут zip?
seaman писал(а):Все РАБОТАЕТ и в билде и в редакторе, пока загружаешь файлы, помещенные в Resource вручную, а не архиватором на лету.

прошу вас, выражайтесь как можно конкретнее. что значит "файлы помещенные в Resources вручную"? если я как угодно помещу файл в Resources в редакторе это одно, в билде - совсем другое.
seaman писал(а):В билде - кладу материалы - грузится, убираю - не грузится. Т.е. четко берутся оттуда.

то есть вы кладете test.mat в папку _Data/Resources и он оттуда грузится?
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение DbIMok 20 июл 2011, 16:14

если вам обязательно хочется что-то зараззиповать, попробуйте такой вариант: в билде грузится первая маленькая сплэш-сцена, она распаковывает файл resources.assets и остальные "тяжелые" сцены. после этого работает как обычно.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение gnoblin 20 июл 2011, 17:05

Я пока не въехал в чем профит от зипования :-w.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение seaman 20 июл 2011, 18:41

Да. Был не прав. :D
Resource.Load действительно грузит только из resources.assets, сделанных самим Юнити. Ну что ж, увы, но материалы отдаем полностью на откуп Юнити. Спасибо за потраченное время.

она распаковывает файл resources.assets и остальные "тяжелые" сцены

Хорошая мысль. Спасибо.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Пред.

Вернуться в Компоненты (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2