TGViewer
Game Development | YeaHub Game Development | YeaHub @yeahub_game_dev · 370 subscribers
Post #414 290
Как пользоваться Unity Profiler, чтобы реально оптимизировать игру

Привет! Сегодня разбираем инструмент, которого не должен бояться Unity разработчик — Unity Profiler. Если ты всё ещё смотришь на лаги через FPS - этот пост для тебя

Разберём как правильно пользоваться профайлером, чтобы находить проблемы, а не угадывать.

1. Главное правило профилирования - профилировать на целевом устройстве

В Editor режиме профайлер врёт. Он профайлит сам себя - таким образом попадает лишняя информация.
Если игра на мобильные устройства - собирай проект на мобильное устройство и профилируй там.
Запускай Build на устройство с опцией Development Build и Autoconnect Profiler → Profiler запустится сам → смотри реальную картину.

2. Определяем что тормозит

Вспоминаем прошлый пост - мы не хотим терять время и оптимизировать то, что не нужно.

Переходишь в Profiler → Timeline и смотришь на две строки:

• CPU — пользовательский код, работа движка, события UI, GC
• GPU — рендер, шейдеры, batching, пост-процессинг

Если CPU забит - исправляем тяжёлые функции, GC.
Если GPU забит - смотрим рендеринг - draw calls, overdraw, тяжёлые шейдеры.

3. Разворачиваем стек вызовов

Поставив полоску Timeline'а на любое место - снизу будут выведен весь стек вызова функций в конкретном кадре.
Так, мы можем посмотреть какие из функций были тяжёлыми, и оптимизировать их.

Тут многих ждёт ловушка: профайлер показывает странные функии движка вроде:

• Gfx.WaitForPresent
• WaitForTargetFPS
• WaitForLastPresentation
• Semaphore.WaitForSignal

Это не значит что эти функции надо оптимизировать.

Например, Gfx.WaitForPresent - это момент, когда CPU ждёт GPU.
Что-то вроде: "Графическая подсистема не готова принять следующий кадр - подожди"

И это значит, что твой bottleneck - GPU и оптимизировать надо его.

Описание всех подобных функций можно найти в документации.

4. Используй Deep Profile

Этот пункт будет показывать все вызовы функций, до самых глубоких функций движка.
Данных получается больше - видно абсолютно всё.

Минусы - из-за большого количества данных труднее ориентироваться и сильно нагружает устройство. Лагать игра на устройстве в таком режиме будет сильно.

Правило простое - если не получается понять проблему без режима Deep Profile - то включай.

5. Используй маркеры

Если ты знаешь, что игра у тебя лагает в какой-то конкретный промежуток - можно поставить маркеры на этот участок кода:

ProfilerMarker marker = new ProfilerMarker("MyMethod");

void Update()
{
marker.Begin();

// твой код

marker.End();
}


Таким образом, в профайлере будет виден вызов "MyMethod" на выделенный маркером промежуток

6. Итог - план оптимизации

Мой порядок действий:

1. Собрать приложение на целевое устройство
2. Развернуть стек вызовов в проблемном месте
3. Определить CPU или GPU bottleneck
4. Отделить системный код от своего
5. Исправить → снова прогнать → сравнить

🚀 Пост Guru Unity: @Minerope
  • 🔥 5
More from @yeahub_game_dev
  1. Oct 9, 2026#video #unity 📚 FREE Complete Unity Game Development Courses Полный бесплатный курс по ра…
  2. Oct 8, 2026#Собес #lost #update 🤔 Что такое lost update и при каких условиях он возникает? 💬 Кратко…
  3. Oct 7, 2026#Собес #Task #ThreadPool #async 🤔 Как Task использует ThreadPool? 💬 Кратко: Task использ…
  4. Oct 5, 2026#Собес #memory_layout #data_alignment #padding 🤔 Какие есть исключения из правил хранения…
  5. Oct 2, 2026#tool #гит 📚 Хочешь изучить Git, не рискуя своей локальной установкой? Теперь можно запус…
  6. Oct 1, 2026#Собес #docker_rm #container #stop 🤔 Как удалить Docker-контейнер? 💬 Кратко: Чтобы удали…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →