понедельник, августа 13, 2012

Unity3d - bundles for free


Для одного проекта пришлось написать аналог динамической подгрузки контента, доступной в pro-версии unity3d в виде bundle-ов. Так как у меня столько денег нет, то пришлось родить нечто подобное на коленке и работающее в free-версии.


Последовательность действий примерно следующая:

  • с доверенного url-а скачивается индексный файл, содержащий список разрешенных аддонов, включая их имена, контрольные суммы и пути для закачки;
  • для каждого аддона из списка проверяется наличие его в локальном кеше (persistentPath). Если его нет или он битый (crc32), то происходит его скачивание с нуля;
  • все файлы представляют из себя Zip-архивы, поддерживающие внутреннюю навигацию и способные возвращать Stream для нужного ресурса.
В коде это выглядит примерно так:


using (var stream = PrefabDeserializer.Instance.GetResourceStream("standard:textures/mi8_ch1")) {
var buf = new byte[stream.Length];
stream.Read (buf, 0, buf.Length);
File.WriteAllBytes ("dump.jpg", buf);
}
"standard" - имя аддона, "textures/mi8_ch1" - путь до ресурса внутри аддона.

Комментариев нет: