Оптимізації гри в Unity. Частина 2

16

Продовжуємо говорити про продуктивності вашої гри. Першу частину шукайте тут.

Почистіть свій код

Ця область дуже велика. Але є основні моменти, які ви повинні перевірити, перш ніж переходити до більш специфічним. Ось вони:
— Об’єднання зазвичай використовуваних об’єктів. Це дозволяє повторно використовувати їх знову і знову, не видаляючи їх. Прикладом цього може бути стрілянина, в якій гравець може стріляти фізичними кулями. Кожна з цих куль може бути повторно використана, як тільки вона зникає.

— Coroutines vs Update. Метод оновлення викликається кілька разів в секунду і часто використовується для поновлення таких речей, як введення гравця. Коли Jonathan переглядає код, він іноді виявляє, що Update використовується для оновлення речей, які насправді не потрібно оновлювати так часто. Наприклад, не потрібно оновлювати стан працездатності кілька разів в секунду. Його потрібно оновити, коли є зміни в здоров’ї. Coroutines може діяти замість методу Update, оновлюючи значення в певний час.
— Компоненти кешування. Це те, що кожен повинен робити. Зазвичай це добре працює в методах Awake або Start, використовуючи GetComponent. Приклад буде приблизно таким:
Оптимізації гри в Unity. Частина 2
де Text — це компонент, який потрібно отримати. Не використовуйте GetComponent кілька разів в методі, коли ви можете кешувати його один раз і використовувати цю змінну у всьому скрипті.
— Уникайте використання GameObject.Find («MyObjectName»). Зазвичай це робиться для пошуку ігрового об’єкта і його призначення деякої змінної. Якщо вам потрібно шукати об’єкт таким чином, краще використовувати GameObject.FindWithTag («MyTag»).
— При тестуванні гри одна з перших речей, на які ви будете орієнтуватися — це Frames Per Second. FPS зазвичай є загальним показником того, наскільки добре працює ваша гра. Це число може сильно варіюватися в залежності від платформи, на якій ви запускаєте гру, але вам потрібно мати певний спосіб перевірити це незалежно. Вікно статистики може вводити в оману щодо FPS, тому краще всього використовувати або профайлер або власний скрипт FPS для відображення на екрані під час гри. Тут ви можете знайти декілька прикладів скриптів FPS.
— Вимкнути невикористовувані скрипти. Як і в грі, якщо ви не використовуєте щось, вимкніть його. Є причина постійно оновлювати точки знаходження ворога, якого ви навіть не бачите? Можливо немає. Залиште тільки те, що необхідно, вимкніть інше.

Запечіть світло

Освітлення може бути досить складною темою, але в цілому ви повинні використовувати мінімальну кількість світильників, необхідних для досягнення бажаного стилю. Світло може бути одним з найдорожчих аспектів гри, тому для низькопродуктивних платформ дуже погано працює динамічне освітлення.
У Unity 5.6 є три режими освітлення: Realtime, Mixed і Baked. Realtime виглядає найкраще, але воно дуже вимоглива. Baked lighting може і повинен використовуватися, коли це можливо. Тепер у вас не будуть витрачається ресурси, щоб постійно перераховувати світло і тіні.
Оптимізації гри в Unity. Частина 2
Майте на увазі, що ви можете «підробляти» висвітлення, використовуючи emissive maps, які змушують частини текстури випромінювати світло. Прикладом цього може служити приладова панель літака з безліччю маленьких вогнів. Створення точки світу для кожного з них було б надзвичайно витратним з точки зору ресурсів, але карта emissive вирішить це питання.

Використовуйте ефективні шейдери

Шейдери керують усіма візуальними елементами у вашій грі. Не будемо вдаватися в складності оптимізації шейдерного коду тут, але ви повинні знати, що оптимізовані шейдери можуть значно підвищити продуктивність, оскільки вони не вимагають тонни обчислень.
Ще один спосіб прискорити вашу гру — використовувати мобільні дружні шейдери навіть на більш високопродуктивних платформах. Якщо ви працюєте над мобільною грою, вам обов’язково потрібно використовувати мобільні шейдери, тому що вони вимагають менше обчислень.
Оптимізації гри в Unity. Частина 2
Такі речі, як «Глобальний туман» і «Риб’яче око», — це загальні ефекти зображення, які ви, можливо, використовували раніше, щоб задати настрій у грі. Такі ефекти повинні бути оптимізовані в максимально можливій мірі, інакше вони багато беруть на себе і гра починає гальмувати.

Включення Instancing

Це відносно нове оновлення продуктивності, яке використовує Unity 5.6, але це один з кращих трюків, які я бачив, і він досить простий у використанні. У стандартному матеріалі (і деяких інших, таких як Mobile і Nature Shaders) ви побачите прапорець у самому низу у розділі «Додаткові параметри», в якому є пункт Enable Instancing. Ви побачите збільшення продуктивності, якщо у вашій сцені є багато ігрових об’єктів, які використовують той же матеріал, наприклад, удари кульових отворів, дерева і т. д.
Оптимізації гри в Unity. Частина 2

Висновки

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

Журналіст: Simply_Better

ДЖЕРЕЛО