Как почистить кэш юнити
Наверное, Вы тоже сталкивались с проблемой крэша флеш плеера или тормозами в некоторых браузерных играх. Вариантов тут может быть много, но большинство из них связано с переполнением кэша, т. е. дискового пространства отведённого под хранение временных файлов. В случае с Falsh плеером речь идёт о так называемых Local Share Objects (LSO) , т. е. флеш куках (англ. flash cookie) . В этой статье я расскажу Вам о том, как можно почистить кэш флэш плеера через параметры Adobe Falsh Player и/или диспетчер параметров Flash Player.
Ну, а начну я с того, что Flash плеер может хранить данные не только в кэше браузера, но и в специальных файлах, которые называются flash cookie. Другими словами, очистить кэш браузера никогда не будет лишним, но иногда нужно почистить и кэш flash плеера. Как это сделатье?
Очистка кэша через параметры Adobe Flash Player
Самым простым, с моей точки зрения, способом здесь является использование параметров Adobe Flash Player. Для этого Вам надо навести курсор на Flash объект (проигрыватель, экран игры и т. п.) и кликнуть правую кнопку мыши. После этого, в появившемся контекстном меню, выберите пункт «Параметры». Откроется окно «Параметры Adobe Flash Player», в котором Вам необходимо перейти на вкладку «Локальное хранилище» (желтая папочка с зеленой стрелочкой) . На открывшейся вкладке переместите бегунок в нулевое значение.
Параметры flash-плеера и локальное хранилище
После этого Вы должны увидеть окно с собщением об удалении информации – кликните кнопку «OK».
очистка кэша Flash-плеера
Примечательно, что при повторном обращении в flash объекту, которому требуется хранить некоторые данные в локальном хранилище Вашего компьютера, может появиться окно с запросом на разрешение такового действия, просто нажмите кнопку «Разрешить».
Очистка кэша Flash-плеера
Очистка кэша через Диспетчер параметров Flash Player
Ещё одним вариант чистики кэша flash плеера заключается в использовании «Диспетчера параметров Flash Player». Для этого Вам понадобится проследуйте по этой ссылке на официальный сайт Adobe. com , где Вы увидите панель «Параметров хранения веб-сайтов».
Диспетчера параметров FlashPlayer
В списке «Веб-сайты» выберите требуемый и кликните кнопку «Удалить веб-сайт». Конечно, таких сайтов может быть достаточно много, что осложнит поиск нужного, но Вы всегда можете отсортировать список по имени сайта, что облегчит задачу. Примечательно и то, что Вам следует быть острожными в использовании кнопку «Удалить все сайты», т. к. в это случае можно удалить настройки всех флеш объектов.
Подведём итоги
Конечно, сейчас существует много и более продвинутых способов удаления Flash куки, но и того что было предложено более чем достаточно. Отдельно стоит отметить и то, что, начиная с версии 11.3, плагин Adobe Flash имеет, так называемый, защищенный режим. В некоторых случаях он может привести к зависанию браузера при открытии веб-страниц с флеш объектами. Поэтому иногда его лучше отключить. Подробней о том как это сделать я уже рассказывал в статье «Что такое plugin-container. exe в Firefox и как его отключить?», см. раздел «Как отключить защищенный режим в Flash Player?» На этом у меня всё. Спасибо за внимание. Удачи!
Скажите, как отключить аннотации (ссылки во время просмотра видео) в этом плеере по умолчанию? Спасибо
3 августа 2014 г., 19:37 Удалить комментарий
2Анонимный если Вы про Youtube, то вот:
3 августа 2014 г., 21:50 Удалить комментарий
Здравствуйте уважаемый посетитель сайта! Чем дольше мы открываем и переходим по разным сайтам, тем быстрее заполняются временные файлы на нашем компьютере, что приводит наш компьютер к медлительной работе. Чтобы избежать данной проблемы, нам необходимо чистить кэш после длительной работы с браузером internet explorer.
Обратите внимание: если вы на своем компьютере используете windows 7, windows 8, то очистка кэша в браузере explorer будет выглядеть следующим образом.
И так чтобы почистить кэш в explorer, вам нужно на своем компьютере запустить браузер internet explorer, затем навести курсор мыши на кнопку настройки расположенной в правой части браузера и один раз нажать левую кнопку мыши. После чего в вашем браузере раскроется контекстное меню, в котором вам нужно выбрать пункт «Свойства обозревателя».
Если у вас установлена операционная система windows 8, то вам нужно будет выбрать пункт «Свойства браузера».
Когда вы выберите пункт «Свойства браузера», на вашем компьютере откроется окошко «Свойства браузера», в данном окошке, вам нужно будет навести курсор мыши на вкладку «Общие» и один раз нажать левую кнопку мыши.
После чего откроется раздел, в котором вы увидите специальную кнопку, при помощи которой вы сможете очистить кэш в браузере интернет explorer.
И так в пункте «Журнал браузера», вам нужно будет нажать на кнопку «Удалить».
Обратите внимание:
Если вы на своем компьютере используете операционную систему Windows Xp, то вам в своем браузере нужно навести курсор мыши на вкладку «Сервис» и один раз нажать левую кнопку мыши, после чего в вашем браузере раскроется дополнительное меню, в котором вам нужно выбрать пункт «Свойства обозревателя».
Когда вы выберите пункт «Свойства обозревателя», на вашем компьютере откроется окошко «Свойства обозревателя», в этом окошке вам нужно выбрать вкладку «Общие» и нажать на кнопку «Удалить».
Когда вы нажмете на кнопку «Удалить», на вашем компьютере откроется окошко, в котором вы и сможете удалить кэш в internet explorer.
Обратите внимание: здесь вы также можете очистить куки internet explorer, очистить журнал историй internet explorer, очистить сохранённые пароли и многое другое.
Если установить галочку напротив пункта «Временные файлы Интернета», то в браузере internet explorer будет произведена очистка кэша.
Если установить галочку напротив пункта «Куки-файлы», то в браузере internet explorer будут удалены куки файлы.
Если установить галочку напротив пункта «Журнал», то в браузере internet explorer будет удален весь журнал историй.
В пункте «Данные веб-форм» галочку не устанавливаем.
Если установить галочку напротив пункта «Пароли», то в браузере internet explorer будут удалены все сохранённые пароли, которые вы сохранили при входе на ранее посещённый сайт.
И в последнем пункте «Данные фильтрации InPrivate» также не устанавливаем галочку.
После того как вы установили галочки в нужные вам пункты, вам остается нажать на кнопочку «Удалить».
Когда вы нажмете на кнопку «Удалить», на вашем компьютере начнется процесс удаления выбранных вами разделов.
Если для вас этот способ неудобен, то тогда вы можете просмотреть другой способ очистки кэша, куки файлов и журнала историй internet explorer – как почистить компьютер от ненужных файлов.
Работая в интернете, открывая страницы сайтов, со временем можно заметить, что работа браузера происходит медленнее и медленнее. Что с этим делать? Если это не вирусы (трояны), то дело, скорее всего, в засорившемся кэше браузера.
Причем кэшируются отдельные элементы страницы:
- картинки (.jpg,.jpg,.jpg)
- файлы стилей (.css)
- файлы яваскриптов (.js)
Накапливая в себе данные о десятках, сотнях посещённых страниц, кэш засоряется, переполняется. Браузеру всё сложнее находить нужную страницу. Как раз в этом случае и нужно чистить область хранения кэшированных файлов, то есть кэш.
Операция чистки кэша есть в каждом браузере. Рассмотрим подробнее алгоритм её выполнения в пяти самых популярных браузерах.
1. Очистка кэша в Internet Explorer
1. Запускаем Internet Explorer.
2. В правом верхнем углу находим значок, похожий на шестерёнку и нажимаем левой кнопкой мыши.
7. В этой вкладке можно, в частности, задать условие проверки новых версий охранённых в кэше страниц.
2. Очистка кэша в Яндекс Браузере
1. Открываем Яндекс Браузере.
3. Очистка кэша в Opera
1. Открываем браузер Opera
4. В новом окне нам предлагается, как и в других браузерах, выбрать, что именно очищать и за какой период.
4. Очистка кэша в FireFox
Очистка их программы может выполняться по следующему алгоритму.
1. Запускаем браузер FireFox
2. В появившимся окне в верхней строке справа находим маленькую полосатую кнопочку
- Управлять кэшированием вэб-содержимого;
- Управлять Автономным вэб-содержимым и данными пользователя;
5. Очистка кэша в Google Chrome
Рассмотрим также процесс очистки кэша ещё одного популярного браузера Chrome, детища компании Google.
1. Запускаем Google Chrome.
2. Находим в верхнем правом углу программы поласатый значок: настройка и управление Google Chrome.
Универсальная очистка кэша для всех браузеров
Сделать это позволит известный, мощный и популярный файловый менеджер Total Commander. Сделать это можно следующим образом.
1. Запускаем программу Total Commander.
3. В новом сервисном окне программы в прямоугольном поле слева мы видим все установленные в системе браузеры.
4. Мы можем сразу начать очистку содержимого всех браузеров, нажав одноименную кнопку.
5. А можем выбрать упоминание любого нужного браузера, нажав на кнопку с соответствующим названием. Например, стандартный Internet Explorer.
6. Здесь мы вольны выбрать удаление истории избранного, кукуков, данных браузера, истории работы браузера. Для окончания выполнения некоторых пунктов потребуется перезагрузка системы.
Таким образом, выбирая вкладки с каждым браузером, мы можем установить флажки напротив той информации, которая подлежит удалению и запустить процедуру очистки всех браузеров системы поочередно из окна всего одной программы.
Богатырь Всея MWO
Открытое тестирование браузерной версии Metal War Online
1. Ник игрока
2. Версия операционной системы (с указанием лицензия/пиратка)
3. Название и версия браузера
4. Версия Unity Web Player
5. Описание проблемы / отзыва [при необходимости, приложите скриншоты, видео, логи]
Возможные трудности при входу в браузерную версию:
Заполните поля: E-mail и Пароль, нажмите кнопку Войти.
Если вы залогинены, то страница игры откроется сразу.
2). Если у вас не установлен Unity Web Player, то стартовая страница будет выглядеть так:
Вопрос: где взять логи игры?
Ответ: логи запущенной из браузера игры можно найти здесь:
Mac OS: X
/Library/Logs/Unity/WebPlayer. log
Windows XP: C:\Documents and Settings\username\Local Settings\Temp\UnityWebPlayer\log\log_UNIQUEID. txt
Windows Vista/7: C:\Users\username\AppData\Local\Temp\UnityWebPlayer\log\log_UNIQUEID. txt
Windows Vista/7 + IE7 + UAC: C:\Users\username\AppData\Local\Temp\Low\UnityWebPlayer\log\log_UNIQUEID. txt
Благодарим за содействие, вы помогаете нам делать игру лучше. Увидимся на поле боя!
Наверное все об этом слышали, но не все знают, что это и для чего нужен. Кэш – это временное хранилище данных, доступ к которому происходит мгновенно, быстрее чем загрузка из сети. Все современные браузеры имеют встроенный кэш и сохраняют туда различные данные. Все файлы, сохраненные в кэше, «живут на вашем компьютере», то есть занимают определенное место на жестком диске.
Что такое кэш
Предназначен кэш для того, чтобы хранить на компьютере те данные веб-страниц, которые используются чаще всего и которые редко меняются со временем. Нужно это для того, чтобы не подгружать их каждый раз при просмотре страницы из интернета, а брать их из кэша, доступ к которому происходит мгновенно. Таким образом, происходит более быстрая загрузка страницы, даже при медленном интернет-соединении. Если подумать, то это логично, зачем загружать каждый раз, например, картинки, если можно однажды их сохранить и все последующие разы подгружать из кэша, к тому же, это экономит трафик.
Но время от времени его нужно чистить, ведь страницы меняются, а информация самостоятельно не удаляется. Таким образом, засоряется память компьютера, да и браузеру сложнее найти нужную информацию.
Как удалить кэш в Хроме
Для очистки кэша в браузере Google Chrome необходимо перейти в настройки, нажав на кнопку с тремя горизонтальными линиями в правом верхнем углу. В выпадающем меню выбрать пункт «История»(или сочетание клавиш Ctrl + H). После этого вам нужно будет нажать на кнопку очистить историю. Не бойтесь, это еще не очистка.
Как удалить кеш в Яндекс Браузере
Так как браузер Яндекс, который скачать можно тут, написан на том же движке, что и Google Chrome, здесь все происходит по аналогии. Заходим в настройки и выбираем вкладку «История». С правой стороны нажимаем на ссылку «Очистить историю».
В новом окне выбираем период очистки, а также выставляем галочку напротив пункта «файлы, сохраненные в кеше». И жмем на кнопку «Очистить историю». Чтобы немного сэкономить время можно воспользоваться комбинацией клавиш Ctrl+H, которая перебросит вас сразу во вкладку очистки истории браузера. Эта же комбинация действует и в браузере Google Chrome.
Как почистить кэш в Опере
Чтобы очистить кэш в опере, скачать с нашего сайта можно тут, необходимо нажать на кнопку с логотипом Опера в левом верхнем углу. В выпадающем меню переходим в пункт Настройки/Обще настройки. Также сюда можно пройти и с помощью комбинации клавиш Ctrl-F12.
В появившемся окне переходим во вкладку «Расширенные» и в списке слева жмем на пункт «История». Визуально находим кнопку очистки кэша и жмем на нее. После этого, не забываем нажать «ОК».
Как почистить кэш в Фаерфоксе
Очистка кэша в браузере Mozilla Firefox, который скачать можно здесь, теперь происходит по новому. Нажмите на «бутерброд» справа в углу. В появившемся меню выберите пункт «Библиотека», далее «Журнал», затем нажмите кнопку «Удалить историю».
Откроется небольшое модальное окно. Его можно также открыть при помощи сочетания клавиш Ctrl-Shift-Del, при открытом браузере.
В этом окне, по аналогии с браузерами Chrome и Yandex выставляете период очистки и галочку, которая должна оповещать браузер о том, что вы хотите очистить кэш. После этого нажимаете «Удалить сейчас».
Как почистить кэш в Эксплорере
Во всеми любимом браузере Internet Explorer, который можно скачать с нашего сайта тут, очистка кэша происходит следующим образом. В правом верхнем углу нажимаете кнопку Сервис (с изображением шестеренки). Перейдите в пункт Безопасность/Удалить журнал обозревателя… Сделать это можно также при помощи комбинации клавиш Ctrl-Shift-Del.
В появившемся окне выставьте галочку напротив пункта «Временные файлы Интернета», а затем необходимо нажать на кнопку «Удалить».
Стоит отметить, что если вы хотите удалить кэш только для определенной страницы, то здесь не требуется заходить в меню. Можно воспользоваться комбинацией клавиш Ctrl-F5. Она обновит страницу вместе с очисткой данных для данной страницы.
Unity Web Player (UWP) — плагин для браузеров, который позволяет запускать игры, приложения. разработанные на одноименном движке. Поддерживается всеми популярными веб-обозревателями и доступен для бесплатной загрузки с официального сайта разработчика. Здесь же можно очистить кэш Unity Web Player.
Для чего нужен кэш
В кэше UWP хранится вся информация о часто используемых приложениях, командах. Здесь находятся служебные данные. которые позволяют плееру быстро открываться и запускать игры. Они загружаются один раз и используются для проигрывания анимации без необходимости постоянного обращения к серверу.
Возможные неполадки
Если важные модули браузера обновились, то при попытке запустить игру может возникать ошибка. Это происходит из-за, когда плеер использует старую информацию.
Возможные проблемы, связанные с кэшем:
- Долгая или бесконечная загрузка приложения.
- Ошибки при загрузке данных.
- Графические артефакты, отсутствие иконок, кнопок.
- Заметные подвисания, баги.
После глобальных обновлений браузерных игр и приложений в социальных сетях, рекомендуется очищать cache. Сделать это можно в настройках веб-обозревателя и конфигурациях Unity Web Player.
Как очистить кэш через браузер
Если игру не получается запустить или в процессе появляются ошибки, то рекомендуется очистить cache приложения. После этого Веб Плеер Юнити загрузит новую информацию с сервера полностью в автоматическом режиме.
После этого перезапустите браузер и попробуйте запустить онлайн-игру. Для этого может потребоваться повторно пройти авторизацию на сайте. Данные приложений хранятся на серверах разработчика. поэтому очищая кэш вы не рискуете потерять прогресс.
Другие способы
Доступ к cache можно получить не только через браузер, но и специальный софт. Это программное обеспечение, которое удаляет ненужные временные файлы с компьютера и другие данные. Популярные утилиты. с помощью которых можно почистить кеш:
- CCleaner;
- Glary Utilities;
- Wise Care 365.
Главное их отличие — наличие дополнительного функционала, инструментов. Поэтому если удалить данные Unity Web Player обычными способами не получается, то воспользуйтесь специальными программами. Они доступны для бесплатной загрузки.
Очистка cache поможет избавиться от многих проблем, которые возникают при запуске браузерных онлайн-игр. При этом пользовательские данные не будут потеряны, т.к. вся информация хранится на серверах разработчика. Если стандартными способами удалить данные кэша не получается, то используйте для этого специальный софт.
Большинство unity-разработчиков знают, что не стоит злоупотреблять дорогими для производительности операциями, такими как, например, получение компонентов. Для этого стоит использовать кэширование. Но и для такой простой оптимизации можно найти несколько различных подходов.
В этой статье будут рассмотрены разные варианты кэширования, их неочевидные особенности и производительность.
Стоит отметить, что говорить мы будем в основном о “внутреннем” кэшировании, то есть получении тех компонентов, которые есть на текущем объекте для его внутренних нужд. Для начала откажемся от прямого назначения зависимостей в инспекторе — это неудобно в использовании, засоряет настройки скрипта и может привести к битым ссылкам при вылете редактора. Поэтому будем использовать GetComponent().
Базовые знания о компонентах и простой пример кэшированияВ Unity3D каждый объект на игровой сцене — это контейнер (GameObject) для различных компонентов (Component), которые могут быть как встроенными в движок (Transform, AudioSource и т.д.), так и пользовательскими скриптами (MonoBehaviour).
Компонент может быть назначен напрямую в редакторе, а для получения компонента из контейнера в скрипте используется метод GetComponent().
Если компонент требуется использовать не единожды, традиционный подход — объявить в скрипте, где он будет использоваться, переменную для него, взять нужный компонент один раз и в дальнейшем использовать полученное значение. Пример:
Кэширование при инициализации актуально также и для свойств, предоставляемых GameObject по умолчанию, таких как .transform, .render и других. Для доступа к ним явное кэширование все равно будет быстрее (да и большая часть из них в Unity 5 помечена как deprecated, так что хорошим тоном будет отказаться от их использования).
Стоит отметить, что самый очевидный метод кэширования (прямое получение компонентов) изначально является наиболее производительным в общем случае и другие варианты лишь его используют и предоставляют более простой доступ к компонентам, избавляя от необходимости писать однотипный код каждый раз либо получать компоненты по запросу.
Также отмечу, что есть и намного более дорогие операции (такие как создание и удаление объектов на сцене) и кэшировать компоненты, не уделяя внимания им, будет пустой тратой времени. Например, в вашей игре есть пулемет, который стреляет пулями, каждая из которых является отдельным объектом (что само по себе неправильно, но это же сферический пример). Вы создаете объект, кэшируете в нем Collider, ParticleSystem и еще кучу всего, но пуля улетает в небо и убивается через 3 секунды, а эти компоненты не используются вообще.
Для того, чтобы этого избежать, используйте пул объектов, об этом есть статьи на Хабре (1, 2) и существуют готовые решения. В таком случае вы не будете постоянно создавать и удалять объекты и раз за разом кэшировать их, они будут переиспользоваться, а кэширование произойдет лишь единожды.
Производительность всех рассмотренных вариантов кэширования будет отображена в сводной диаграмме.
У метода GetComponent есть два варианта использования: шаблонный GetComponent() и обычный GetComponent(type), требующий дополнительного приведения (comp as T). В сводной диаграмме по производительности будут рассмотрены оба этих варианта, но стоит учесть, что шаблонный метод проще в применении. Также существует вариант получения списка компонентов GetComponents с аналогичными вариантами, они также будут проверены. В диаграммах время выполнения GetComponent на каждой платформе принято за 100% для нивелирования особенностей оборудования, а также есть интерактивные версии для большего удобства.
Для кэширования можно использовать свойства. Плюс этого метода — кэширование произойдет только тогда, когда мы обратимся к свойству, и его не будет тогда, когда это свойство используется. Минус заключается в том, что в данном случае мы пишем больше однотипного кода.
Самый простой вариант:
Этот вариант благодаря проверке на отсутствие компонента обладает проблемами с производительностью.
Здесь нужно учитывать, что в Unity3D используется кастомный оператор сравнения, поэтому когда мы безопасно проверяем, закэшировался ли компонент ( if ( !component )), на самом деле движок обращается в native-код, что является ресурсозатратным, более подробно можно прочитать в этой статье.Есть два варианта решения этой проблемы:
Использовать дополнительный флаг, указывающий, производилось ли кэширование:
Явно приводить компонент к object:
Но нужно учитывать, что этот вариант безопасен только в том случае, когда компоненты объекта не удаляются (что обычно происходит нечасто).
Почему в Unity можно обратиться к уничтоженному объекту?Первая проблема может быть решена использованием шаблонов:
Вторую проблему можно обойти, создав отдельный компонент для кэширования и используя в своих скриптах ссылку на него.
После этого в любом скрипте можно получить этот компонент:
Но этот вариант снова требует задания всех необходимых компонентов заранее. Можно решить это с помощью шаблонов:
Минус этих вариантов — нужно следить за мертвыми ссылками. Если не очищать кэш (например, при загрузке сцены), то его объем будет только расти и засорять память ссылками на уже уничтоженные объекты.
Интерактивный вариант
Как мы видим, серебряной пули не нашлось и самый оптимальный вариант кэширования — получать компоненты напрямую при инициализации. Обходные пути не оптимальны, за исключением свойств, которые требуют написания дополнительного кода.
Атрибуты позволяют добавлять мета-информацию для элементов кода, таких как, например, члены класса. Сами по себе атрибуты не выполняются, их необходимо использовать при помощи рефлексии, которая является достаточно дорогой операцией.
Мы можем объявить свой собственный атрибут для кэширования:
И использовать его для полей своих классов:
Но пока что это нам ничего не даст, данная информация никак не используется.
Мы можем создать свой класс, который будет получать члены класса с данным атрибутом и явно получать их при инициализации:
Если мы создадим наследника этого компонента, то сможем помечать его члены атрибутом [Cached], тем самым не заботясь о их явном кэшировании.
Но проблема с производительностью и необходимость наследования нивелирует удобство данного метода.
Список членов класса не меняется при выполнении кода, поэтому мы можем получить его один раз, сохранить его для данного типа и использовать в дальнейшем, почти не прибегая к дорогой рефлексии. Для этого нам потребуется статический класс, хранящий результаты анализа типов.
И теперь для кэширования в каком-либо скрипте мы используем обращение к нему:
После этого все члены класса, помеченные [Cached] будут получены с помощью GetComponent.
Сравним производительность для вариантов с 1 или 5 кэшируемыми компонентами:
Интерактивный вариант
Интерактивный вариант
- Критичное снижение производительности происходит только при инициализации первого экземпляра класса
- Инициализация последующих экземпляров этого класса происходит значительно быстрее, но не так быстро, как прямое кэширование
- Производительность получения компонентов после инициализации идентична получению члена класса и выше, чем у GetComponent и различных вариантов со свойствами
- Но при этом инициализируются все члены класса, независимо от того, будут ли они использоваться в дальнейшем
Уже когда я заканчивал эту статью, мне подсказали одно интересное решение для кэширования. Так ли необходимо в нашем случае сохранять компоненты именно в запущенном состоянии приложения? Вовсе нет, мы это делаем только единожды для каждого экземпляра, соответственно функционально это ничем не отличается от назначения их в редакторе до запуска приложения. А все, что можно сделать в редакторе, можно автоматизировать.
Так появилась идея кэшировать зависимости скриптов с помощью отдельной опции в меню, которая подготавливает экземпляры на сцене к дальнейшему использованию.
- Он не требует ресурсов на явную инициализацию
- Объекты подготавливаются явно (перекомпиляции кода недостаточно)
- Объекты на время подготовки должны быть на сцене
- Подготовка не затрагивает префабы в проекте (если не сохранить их со сцены явно) и объекты на других сценах
Вполне возможно, что текущие ограничения в дальнейшем можно будет устранить.
Особенности получения отсутствующих компонентов
Интересной особенностью оказалось то, что попытка получить отсутствующий компонент занимает больше времени, чем получение существующего. При этом в редакторе наблюдается заметная аномалия, которая и навела на мысль проверить это поведение. Так что никогда не полагайтесь на результаты профилирования в редакторе.
Интерактивный вариант
В данной статье вы увидели оценку различных методов кэширования компонентов, а также узнали об одном из полезных применений атрибутов. Методы, основанные на рефлексии, в принципе, могут применяться при создании проектов на Unity3D, если учитывать его особенности. Один из них позволяет писать меньше однотипного кода, но чуть менее производителен, чем решение “в лоб”. Второй на данный момент требует чуть больше внимания, но не влияет на итоговую производительность.
Проект с исходниками скриптов для теста и proof-of-concept кэша с помощью атрибутов доступны на GitHub (отдельный пакет с итоговой версией здесь). Возможно, у вас найдутся предложения по улучшению.
Спасибо за внимание, надеюсь на полезные комментарии. Наверняка этот вопрос рассматривался многими и вам есть что сказать по этому поводу.
В Unity есть полностью автоматизированный конвейер ассетов. Где бы исходный ассет (типа файлов .psd или .fbx ) не был изменён, Unity определит изменение и автоматически переимпортирует его. Импортированные из файла данные далее хранятся Unity в своём собственном внутреннем формате.
Такая схема используется для создания наиболее эффективного и гибкого рабочего процесса для каждого пользователя. Однако когда вы работаете в команде, вы заметите, что другие пользователи могут совершать изменения в ассетах и для всех их этот ассет должен быть снова импортирован. Кроме того, ассеты должны быть переимпортированы, когда вы переключаетесь между настольной и мобильной целевыми платформами. Следовательно, переключение может занять длительное время на больших проектах.
Время, необходимое для повторного импорта ассетов может быть значительно сокращено с помощью кэширования данных импортированного ассета в Cache Server .
Импорт каждого ассета кэшируется на основании
- Самого файла ассета
- Настроек импорта
- Версии импортера ассетов
- Текущей платформы
Если изменится что-либо из перечисленного выше, ассет будет переимпортирован, иначе он будет скачан с Cache Server’а.
Когда вы включаете cache server в настройках, вы даже можете сделать результаты импорта ассетов доступными на разных машинах (например, работу по импорту выполнить на одной машине, и поделиться результатами с остальными).
Учтите, что после настройки cache server этот процесс становится полностью автоматическим, то есть, рабочий процесс не требует дополнительных изменений. Это просто снизит время, требуемое для импортирования проекта без вмешательства в ваш рабочий процесс.
Как настроить Cache Server (пользователь)
Настройка Cache Server очень проста. Всё, что вам следует сделать - установить флажок Use Cache Server в настройках и указать редактору Unity локальной машины где находится Cache Server .
Найти этот флажок можно в Unity->Preferences на Mac или в Edit->Preferences на PC.
Если вы разместили Cache Server на вашей локальной машине, укажите localhost в качестве адреса сервера. Однако из-за ограничений дискового пространства, рекомендуется размещать Cache Server на отдельной машине.
Как настроить Cache Server (пользователь)
Администраторам следует настроить Cache Server машину, на которой будут храниться кэшированные ассеты.
Cache Server должен размещаться на надёжной машине с очень большим объёмом свободного дискового пространства (намного больше, чем размер самого проекта, т.к. там будет храниться несколько версий импортированных ресурсов). После заполнения диска, Cache Server может работать медленней.
Установка Cache Server в виде сервиса
Предоставленные .sh и .cmd скрипты должны быть установлены в качестве сервиса на сервере. Cache server может быть безопасно завершён и перезапущен в любое время, т.к. он использует атомарные файловые операции.
Настройка Cache Server’а
Если вы просто запустите Cache Server двойным кликом по скрипту, он создаст папку “cache” рядом со скриптом, и будет хранить свои данные в этой папке. Максимально допустимый размер содержимого в этой папке cache - 50 ГБ. Вы можете настроить максимальный размер и расположение данных с помощью опций командной строки, например:
/mycachePath --size 2000000000
/mycachePath --port 8199 -nolegacy
You can configure the cache server by using the following command line options:
--port lets you specify the server port, it only applies to the new cache server, the default value is 8126 .
--path lets you specify the path of the cache location, it only applies to the new cache server, the default value is ./cache5.0 .
--legacypath lets you specify the path of the cache location, it only applies to the legacy cache server, the default value is ./cache .
--size lets you specify the maximum cache size in bytes for both cache servers. Files that have not been used recently will automatically be discarded when the cache size is exceeded.
--nolegacy if specify it will NOT start the legacy cache server, otherwise the legacy cache server is started on port 8125 .
Требования к машине, на которой размещён Cache Server
Для наилучшей производительности, на машине должно быть достаточно RAM для хранения всей папки импортированного проекта. Кроме того, желательно иметь машину с быстрым жёстким диском и быстрым Ethernet соединением. Также на диске должно быть достаточное количество свободного места. С другой стороны, Cache Server потребляет очень мало CPU ресурсов.
Одно из основных отличий Cache Server от системы контроля версий это то, что закэшированные данные всегда могут быть локально пересобраны. Это просто инструмент для увеличения производительности. По-этому нет смысла использовать Cache Server по сети Internet. Если у вас распределённая команда, вам следует разместить отдельный cache server в каждой локации.
Cache Server должен работать на машине под управлением Linux или MacOS. Файловая система Windows не достаточно хорошо оптимизирована под используемый в Asset Cache Server’е способ хранения данных, и проблемы с блокировкой файлов на Windows могут вызывать проблемы, не возникающие на Linux или Mac OS.
Cache Server FAQ
Будет ли размер базы моего Cache Server бесконечно расти по мере импорта и хранения все большего числа ресурсов?
Cache Server автоматически удаляет ассеты, которые не использовались какое-то время (конечно, если эти ассеты вновь потребуются, они будут созданы заново при следующем использовании).
Cache server работает только с asset server?
Работа cache server’а прозрачна для систем контроля версий и исходников, так что вы не ограничены в использовании только Unity asset server’а.
Какие изменения приведут к повторной перегенерации импортированного файла?
При импортировании ассета, Unity генерирует MD5 хэш всех исходных данных.
Для текстуры это:
- Исходный ассет: файл “myTexture.psd”
- Мета-файл: “myTexture.psd.meta” (содержит все настройки импортера)
- Номер внутренней версии импортера текстуры
- Хэш номеров версий всех AssetPostprocessor’ов
Если этот хэш не совпадет с тем, что хранится в Cache Server, ассет будет переимпортирован, иначе будет скачана закэшированная версия. Редактор Unity будет выкачивать ассеты с сервера по мере необходимости - ассеты не передаются во все проекты сразу после изменения.
Как мне быть с зависимостями ассета?
Cache Server не обрабатывает зависимости. Конвейер ассетов Unity не работает с понятием зависимостей. Он построен так, чтобы избегать зависимостей между ассетами. AssetPostprocessor ’ы - основной способ настройки импортера ассетов “под себя”. Например, вы могли бы пожелать добавить MeshCollider’ы к некоторым GameObject’ам в файле fbx на основе их имени или тэга.
Кроме того, AssetPostprocessor ’ы довольно просто использовать для введения зависимостей. Например, вы могли бы использовать данные из текстового файла рядом с ассетом для добавления дополнительных компонентов к импортированным игровым объектам. Это не поддерживается в Cache Server. Если вы желаете использовать Cache Server, вам придётся удалить зависимости на других ассетах в папке проекта. Так как Cache Server ничего не знает про зависимость в вашем пост-процессоре, он не будет знать о том, что что-то изменилось, таким образом, используя старую закэшированную версию ассета.
На деле, существует множество способов заставить пост-обработку хорошо работать с cache server. Вы можете использовать:
- Путь импортированного ассета
- Любые настройки импорта ассета
- Сам по себе исходный ассет, или любые сгенерированные из него данные, передаваемые вам в пост-процессор ассета.
Есть ли какие-то тонкости при работе с материалами?
Изменение уже существующих материалов может привести к проблеме. При использовании Cache Server, Unity удостоверяется в обслуживании ссылок на материалы. Но так как ни одно событие пост-обработки не будет вызвано, содержимое материала не может быть изменено, когда модель импортируется через Cache Server.
Есть ли типы ассетов, которые не кэшируются сервером?
Существует несколько видов данных ассета, которые не кэшируются сервером. Кеэширование скриптовых файлов ничего нам не даст, потому сервер будет их игнорировать. Кроме того, нативные файлы, используемые программным обеспечением для 3D моделирования (Maya, 3D Max и т.д.) конвертируются в FBX с помощью самого приложения. На сегодняшний день, ассет сервер не кэширует ни нативный файл, ни промежуточный FBX файл, генерируемый в процессе импорта. Однако можно получить выгоду от сервера, экспортируя файлы в FBX из ПО для моделирования и добавляя эти файлы в Unity проект.
Читайте также: