Unity - керівництво зменшення розміру файлу збірки

Лог допомагає виявити Ассет, які ви, можливо, побажаєте видалити або оптимізувати, але вам варто враховувати наступне перед тим як почати роботу:

Unity перекодовує імпортовані Ассет у власні внутрішні формати, тому вибір вихідного формату Ассет не має значення. Наприклад, якщо у вас в проекті є Photoshop текстура з безліччю шарів, вони будуть об'єднані, а сама текстура буде стиснута перед складанням проекту. Експорт текстури у вигляді PNG ніяк не вплине на розмір збірки, так що вам слід дотримуватися форматів, найбільш зручних для вас при розробці.

Unity відсіває більшість невикористовуваних Ассет під час збирання, так що ви нічого не виграєте, вручну видаляючи Ассет з проекту. Ассет, зміст яких не повинен отсеиванию - скрипти (вони в будь-якому випадку займають дуже мало місця) і все, що знаходиться в папці Resources (тому що Unity не може визначити які з них будуть використовуватися, а які - ні). Пам'ятаючи про це, вам слід переконатися, що в папці Resources знаходяться тільки ті Ассет, які дійсно потрібні під час гри. Крім того, замість зберігання Ассет в папці Resources, ви можете вибрати AssetBundles для їх динамічного завантаження, щоб ще більше знизити розмір збірки.

Поради щодо зменшення розміру збірки

Найчастіше, найбільше місця в збірці займають текстури. Перше, що слід зробити - використовувати стислі формати текстур (DXT (для настільних платформ) або PVRTC) там, де це можливо.

Якщо це не призведе до зменшення розміру, спробуйте знизити якість текстур. Хитрість тут в тому, що вам не потрібно змінювати вихідний контент. Просто виберіть текстуру у вікні Project і змініть значення властивості Max Size (максимальний розмір) в настройках імпорту. Можна наблизити об'єкт, на якому використовується обрана текстура, і підібрати значення Max Size так, щоб ви не помічали погіршення якості текстури у вікні Scene (Scene View).

Unity - керівництво зменшення розміру файлу збірки
Зміна максимального розміру текстури вплине лише на дозвіл текстури в грі, і не змінить ваш Ассет текстури

У наступній таблиці показано, як багато місця займають різні формати зображень, в байтах на піксель:

Споживання пам'яті (байти / піксель)

Формула займаного на диску місця така: ширина * висота * bpp. Якщо ви використовуєте міпмапи, тоді розмір на диску буде приблизно на третину більше, ніж при звичайному одиничному зображенні.

Меши і анімації

Меши і імпортований анімаційні кліпи можуть стискатися, щоб займати менше місця в збірці вашої гри. Стиснення може бути включено в налаштуваннях імпорту заважав.

При стисненні мешів і анімацій використовується квантування, тому хоч розмір файлів і буде нижче, стиснення може привнести деякі похибки. Спробуйте експериментально встановити, який ступінь стиснення прийнятна для ваших моделей.

Врахуйте, що стиснення заважав знижує тільки фізичних розмір файлів, але не обсяг використовуваної пам'яті при виконанні програми. А от зниження кількості ключових кадрів в анімації (значення Keyframe reduction у властивості Anim. Compression в налаштуваннях імпорту) зменшує і фізичний розмір файлів, і споживання пам'яті під час виконання програми, тому рекомендується завжди залишати цю настройку включеною.

За замовчуванням, Unity включає в збірку тільки ці DLL файли:

  • mscorlib.dll
  • Boo.Lang.dll
  • UnityScript.Lang.dll
  • UnityEngine.dll

При роботі над грою рекомендується уникати використання залежностей з System.dll або System.Xml.dll. За замовчуванням, Unity не включає ці бібліотеки в до складання програвача, але якщо в своєму коді ви використовуєте їх класи, бібліотеки будуть включені в збірку. Ці DLL файли додадуть до розміру збірки програвача близько одного мегабайта. Якщо у вашій грі потрібна робота з XML, ви можете використовувати бібліотеки виду Mono.Xml.zip в якості невеликої за розмірами альтернативи системним бібліотекам. Хоч більшість дженерик контейнерів міститься в mscorlib, але Stack<> і деякі інші знаходяться в System.dll, так що постарайтеся уникати їх використання по можливості.

Unity - керівництво зменшення розміру файлу збірки
Як ви можете бачити, Unity включає System.Xml.dll і System.dll, при складанні програвача

Зменшення розміру мобільного .NET бібліотеки

Для деяких мобільних пристроїв, Unity підтримує два рівня сумісності .NET API. NET 2.0 і підмножина .NET 2.0 (.NET 2.0 subset). Ви можете вибрати відповідний рівень для вашої збірки в параметрах програвача.

Профіль .NET 2.0 API відповідає повною версією .NET 2.0 API. Більшість підпрограм бібліотеки повністю реалізовані, тому використання цієї опції дозволяє отримати найкращу сумісність з вже існуючим кодом. Однак, в більшості ігор не потрібна повна версія бібліотеки і непотрібний код займає цінне простір в пам'яті.

Часті питання про AssetBundles

Схожі статті