#Собес #application_layer #mail_services #file_transfer
🤔 Назовите некоторые службы, предоставляемые прикладным уровнем в интернет-модели.
💬 Кратко:
Прикладной уровень предоставляет такие службы, как электронная почта (SMTP), передача файлов (FTP), управление доступом (SSH) и сетевой виртуальный терминал (Telnet).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Назовите некоторые службы, предоставляемые прикладным уровнем в интернет-модели.
💬 Кратко:
Прикладной уровень предоставляет такие службы, как электронная почта (SMTP), передача файлов (FTP), управление доступом (SSH) и сетевой виртуальный терминал (Telnet).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#podcast #всё
📚 Подкасты Y_LAB
Здесь вы найдете разнообразный IT-контент: от глубоких технических обсуждений до увлекательных и расслабляющих бесед. Наши эпизоды охватывают широкий спектр тем, связанных с разработкой и новейшими технологиями, чтобы каждый разработчик нашел что-то для себя. Присоединяйтесь к нам, чтобы углубить свои знания, оставаться в тренде и вдохновляться новыми идеями!
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Подкасты Y_LAB
Здесь вы найдете разнообразный IT-контент: от глубоких технических обсуждений до увлекательных и расслабляющих бесед. Наши эпизоды охватывают широкий спектр тем, связанных с разработкой и новейшими технологиями, чтобы каждый разработчик нашел что-то для себя. Присоединяйтесь к нам, чтобы углубить свои знания, оставаться в тренде и вдохновляться новыми идеями!
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #unity #addressables #memory_management
🤔 Если использовать Addressables, как выгрузить ассет из памяти?
💬 Кратко:
Для выгрузки ассета используйте Addressables.Release(handle) или Addressables.ReleaseInstance(gameObject). Для полной очистки кэша используйте CleanBundleCache. Выгрузка происходит не мгновенно, а при следующей сборке мусора.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Если использовать Addressables, как выгрузить ассет из памяти?
💬 Кратко:
Для выгрузки ассета используйте Addressables.Release(handle) или Addressables.ReleaseInstance(gameObject). Для полной очистки кэша используйте CleanBundleCache. Выгрузка происходит не мгновенно, а при следующей сборке мусора.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Структура кадра в Unity и почему это важно
Сегодня разберём благодаря каким операциям мы получаем картинку в юнити, что такое Performance Bottleneck и как эти знания помогут оптимизировать вашу игру.
Что такое кадр и как он формируется
Наверняка, каждый знаком с понятием FPS.
Если игра работает на 60 FPS - это 60 циклов формирования кадра в секунду.
Каждый кадр - это последовательность операций, где участвуют:
• CPU - выполняет код Unity и ваш код, готовит геометрию кадра.
• GPU - получает подготовленные данные и рендерит финальное изображение.
Загвоздка - CPU и GPU не могут работать параллельно
GPU не может начать раскрашивать картинку, геометрия которой ещё не подготовлена от CPU. И наоборот - CPU не может начать работать над следующим кадром, пока GPU не раскрасила прошлый.
Это видно на приложенной схеме - у CPU присутствует блок "Wait", так как GPU ещё занимается прошлым кадром. В это время CPU просто простаивает.
Такая ситуация называется Performance Bottleneck
Performance bottleneck - это компонент (CPU или GPU), который ограничивает FPS. У нас есть "затык" в одном из компонентов.
Неопытный разработчик захочет оптимизировать игру, не разберётся в "затыке" производительности и пойдёт оптимизировать CPU (код или геометрию сцены).
Если bottleneck в GPU - весь эффект оптимизаций будет в увеличении ожидания от CPU.
• Было: CPU — 10 мс работы + 10 мс ожидания GPU.
• Стало: CPU — 8 мс работы + 12 мс ожидания GPU.
CPU стал работать быстрее, но FPS не вырос, потому что настоящая проблема - GPU.
Если оптимизировать не тот компонент, результат будет нулевым.
Зачем это знать
Перед любыми оптимизациями нужно определить:
• упираетесь вы в CPU или в GPU,
• какое именно место внутри них тормозит: логика, физика, UI, рендер, память.
Так вы сможете реально оптимизировать свою игру и не терять время зря.
В следующих постах от Guru разберём работу с Profiler и научимся определять Performance Bottleneck
🚀 Пост Guru Unity: @Minerope
Сегодня разберём благодаря каким операциям мы получаем картинку в юнити, что такое Performance Bottleneck и как эти знания помогут оптимизировать вашу игру.
Что такое кадр и как он формируется
Наверняка, каждый знаком с понятием FPS.
Если игра работает на 60 FPS - это 60 циклов формирования кадра в секунду.
Каждый кадр - это последовательность операций, где участвуют:
• CPU - выполняет код Unity и ваш код, готовит геометрию кадра.
• GPU - получает подготовленные данные и рендерит финальное изображение.
Загвоздка - CPU и GPU не могут работать параллельно
GPU не может начать раскрашивать картинку, геометрия которой ещё не подготовлена от CPU. И наоборот - CPU не может начать работать над следующим кадром, пока GPU не раскрасила прошлый.
Это видно на приложенной схеме - у CPU присутствует блок "Wait", так как GPU ещё занимается прошлым кадром. В это время CPU просто простаивает.
Такая ситуация называется Performance Bottleneck
Performance bottleneck - это компонент (CPU или GPU), который ограничивает FPS. У нас есть "затык" в одном из компонентов.
Неопытный разработчик захочет оптимизировать игру, не разберётся в "затыке" производительности и пойдёт оптимизировать CPU (код или геометрию сцены).
Если bottleneck в GPU - весь эффект оптимизаций будет в увеличении ожидания от CPU.
• Было: CPU — 10 мс работы + 10 мс ожидания GPU.
• Стало: CPU — 8 мс работы + 12 мс ожидания GPU.
CPU стал работать быстрее, но FPS не вырос, потому что настоящая проблема - GPU.
Если оптимизировать не тот компонент, результат будет нулевым.
Зачем это знать
Перед любыми оптимизациями нужно определить:
• упираетесь вы в CPU или в GPU,
• какое именно место внутри них тормозит: логика, физика, UI, рендер, память.
Так вы сможете реально оптимизировать свою игру и не терять время зря.
В следующих постах от Guru разберём работу с Profiler и научимся определять Performance Bottleneck
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🏆2
#Собес #c++ #object-oriented #oop
🤔 Что такое C++?
💬 Кратко:
C++ — это мощный императивный язык программирования общего назначения, разработанный как расширение языка C. Он поддерживает объектно-ориентированное программирование, шаблоны и другие дополнительные функции. C++ используется для разработки различных приложений, включая операционные системы, игры и высокопроизводительное ПО.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое C++?
💬 Кратко:
C++ — это мощный императивный язык программирования общего назначения, разработанный как расширение языка C. Он поддерживает объектно-ориентированное программирование, шаблоны и другие дополнительные функции. C++ используется для разработки различных приложений, включая операционные системы, игры и высокопроизводительное ПО.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#Собес #git_commit
🤔 Что делает команда git commit?
💬 Кратко:
Команда
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делает команда git commit?
💬 Кратко:
Команда
git commit сохраняет изменения из индекса в историю репозитория. Она фиксирует текущий прогресс, позволяя вернуться к этой точке в будущем. Каждый коммит сопровождается описанием, которое помогает понять, что было сделано.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#tool #графы
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #linq #query #ienumerable
🤔 Что такое LINQ в C#?
💬 Кратко:
LINQ (Language Integrated Query) — это встроенный в C# инструмент для удобного запроса данных. Он позволяет работать с коллекциями, базами данных, XML и другими источниками с использованием SQL-подобного синтаксиса.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое LINQ в C#?
💬 Кратко:
LINQ (Language Integrated Query) — это встроенный в C# инструмент для удобного запроса данных. Он позволяет работать с коллекциями, базами данных, XML и другими источниками с использованием SQL-подобного синтаксиса.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Как пользоваться 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. Используй маркеры
Если ты знаешь, что игра у тебя лагает в какой-то конкретный промежуток - можно поставить маркеры на этот участок кода:
Таким образом, в профайлере будет виден вызов "MyMethod" на выделенный маркером промежуток
6. Итог - план оптимизации
Мой порядок действий:
1. Собрать приложение на целевое устройство
2. Развернуть стек вызовов в проблемном месте
3. Определить CPU или GPU bottleneck
4. Отделить системный код от своего
5. Исправить → снова прогнать → сравнить
🚀 Пост Guru Unity: @Minerope
Привет! Сегодня разбираем инструмент, которого не должен бояться 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. Исправить → снова прогнать → сравнить
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
#Собес #csharp #delegate #unity
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Когда уместно вместо Addressables использовать свою реализацию?
- Расскажи про использование async await.
- Как подойти к выбору коллекции для задачи? Как учитывать алгоритмическую сложность при выборе?
- Что такое ивенты в C#?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Когда уместно вместо Addressables использовать свою реализацию?
- Расскажи про использование async await.
- Как подойти к выбору коллекции для задачи? Как учитывать алгоритмическую сложность при выборе?
- Что такое ивенты в C#?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_revert
🤔 Когда вы используете git revert?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Когда вы используете git revert?
💬 Кратко:
git revert используется для создания нового коммита, который отменяет изменения, сделанные в предыдущем коммите. Эта команда полезна, когда нужно откатить изменения без изменения истории репозитория.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#repository #godotengine
📚 Godot Engine
Официальный исходный код открытого кросс‑платформенного игрового движка Godot. Это полноценная среда для разработки 2D‑ и 3D‑игр, включающая редактор, скриптовый язык GDScript (похожий на Python), систему сцен и узлов, инструменты анимации, физику и рендеринг. Репозиторий содержит всю кодовую базу движка, документацию, примеры, а также систему отслеживания задач и обсуждений. Подходит как для изучения архитектуры движка, так и для внесения собственных изменений, создания плагинов или сборки кастомных версий.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Godot Engine
Официальный исходный код открытого кросс‑платформенного игрового движка Godot. Это полноценная среда для разработки 2D‑ и 3D‑игр, включающая редактор, скриптовый язык GDScript (похожий на Python), систему сцен и узлов, инструменты анимации, физику и рендеринг. Репозиторий содержит всю кодовую базу движка, документацию, примеры, а также систему отслеживания задач и обсуждений. Подходит как для изучения архитектуры движка, так и для внесения собственных изменений, создания плагинов или сборки кастомных версий.
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #actor #unreal_engine
🤔 Напишите функцию на C++ для применения урона актеру при столкновении с другим актером.
💬 Кратко:
Для применения урона актеру при столкновении с другим актером используйте событие OnActorHit для обнаружения столкновений и вызовите функцию TakeDamage на затронутом актере, передав параметры урона.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Напишите функцию на C++ для применения урона актеру при столкновении с другим актером.
💬 Кратко:
Для применения урона актеру при столкновении с другим актером используйте событие OnActorHit для обнаружения столкновений и вызовите функцию TakeDamage на затронутом актере, передав параметры урона.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🔥3
📦 Memory Profiler - инструмент, который спасёт вашу игру от утечек памяти
Привет! Продолжаем тему оптимизаций и профилирования и сегодня разберём один из самых полезных инструментов в Unity - Memory Profiler.
Если у вас рандомные вылеты на мобилках, фризы при загрузке сцен или игра стабильно жрёт много RAM - этот инструмент вам поможет исправить ситуацию.
Что такое Memory Profiler и зачем он нужен
Memory Profiler - это пакет от Unity для анализа использования памяти. Он помогает:
• Видеть, что именно занимает RAM
• Отлавливать утечки
• Находить лишние текстуры, Mesh’и, аудио, коллекции
• Находить ассеты, которые не выгружаются
• Сравнивать состояние памяти в разные моменты игры
Как пользоваться Memory Profiler
Сначала установи пакет (на новых версиях Unity вшит по дефолту): Window → Package Manager → Memory Profiler → Install.
Открой: Window → Analysis → Memory Profiler.
1️⃣ Собери приложение на target устройство
У этого профайлера такого же сайд эффект, как у обычного - в Editor режиме будет профайлить сам себя.
Поэтому, собираем приложение на устройство.
2️⃣ Сделай срез памяти (snapshot)
Snapshot - фиксация текущего состояния памяти.
Snapshot хранятся на диске и их можно сравнивать между собой.
3️⃣ Изучи информацию, используя разные режимы в Snapshot
Memory Profiler даёт несколько разных представлений памяти. Это ключ к тому, чтобы быстро понять, где проблема.
1. Summary (Обзор)
Самая верхнеуровневая картина. Сразу видно:
• Общий объём памяти
• Самые тяжёлые категории (Textures, Meshes, Audio, GC Heap)
• В каких областях память растёт
Это то, что открываешь первым, чтобы понять масштаб беды.
Здесь сразу можно увидеть "тяжёлые" ассеты и добавить им сжатия.
2. Objects and Allocations
Показывает объекты Unity (Texture2D, Mesh, AudioClip, GameObject, ScriptableObject) и чистые C# объекты.
Здесь обычно ищут:
• дубли текстур
• Mesh’и с Read/Write
• «вечные» ScriptableObject
• коллекции, которые растут без очистки
3. Native Memory
Память движка и нативных структур: Shader, ComputeBuffer, RenderTexture и т.д.
Именно здесь чаще всего «утекают»:
• RenderTexture
• Shader Variant Collection
• Compute буферы
• GPU ресурсы, которые не освобождаются
4. Managed Objects (GC Heap)
Память .NET среды.
Тут можно найти:
• Списки, которые растут
• Dictionary, которые не чистят
• Объекты, удерживаемые статическими ссылками
• Лямбды, оставшиеся в событиях
4️⃣ Проведи оптимизации
Увидел "тяжёлые" ассеты в проекте - добавь им сжатия
Обнаружил дубляж ассетов - проверяй их загрузку/выгрузку
Просто смотри что жрёт больше всего памяти и найди способы оптимизации веса таких объектов.
5️⃣ Сделай новый Snapshot и используй сравнение (Diff)
Diff - один из самых полезных режимов.
Сразу видно:
• улучшения памяти в сравнении с предыдущим snapshot
• что новое появилось в памяти
• какие ассеты загружаются повторно
• какой тип объектов растёт быстрее всего
Совет - куда обращать внимание, что чаще всего жрёт память
• Текстуры - особенно UI, PNG без компрессии, включённые Read/Write (часто у Азиатских шрифтов TMPro)
• AudioClip - оставленные в RAM WAV-ки
• Meshes - включённый Read/Write Enabled
• Addressables - загрузили, но не выгрузили
• Коллекции - растут и никто не чистит
🚀 Пост Guru Unity: @Minerope
Привет! Продолжаем тему оптимизаций и профилирования и сегодня разберём один из самых полезных инструментов в Unity - Memory Profiler.
Если у вас рандомные вылеты на мобилках, фризы при загрузке сцен или игра стабильно жрёт много RAM - этот инструмент вам поможет исправить ситуацию.
Что такое Memory Profiler и зачем он нужен
Memory Profiler - это пакет от Unity для анализа использования памяти. Он помогает:
• Видеть, что именно занимает RAM
• Отлавливать утечки
• Находить лишние текстуры, Mesh’и, аудио, коллекции
• Находить ассеты, которые не выгружаются
• Сравнивать состояние памяти в разные моменты игры
Как пользоваться Memory Profiler
Сначала установи пакет (на новых версиях Unity вшит по дефолту): Window → Package Manager → Memory Profiler → Install.
Открой: Window → Analysis → Memory Profiler.
У этого профайлера такого же сайд эффект, как у обычного - в Editor режиме будет профайлить сам себя.
Поэтому, собираем приложение на устройство.
Snapshot - фиксация текущего состояния памяти.
Snapshot хранятся на диске и их можно сравнивать между собой.
Memory Profiler даёт несколько разных представлений памяти. Это ключ к тому, чтобы быстро понять, где проблема.
1. Summary (Обзор)
Самая верхнеуровневая картина. Сразу видно:
• Общий объём памяти
• Самые тяжёлые категории (Textures, Meshes, Audio, GC Heap)
• В каких областях память растёт
Это то, что открываешь первым, чтобы понять масштаб беды.
Здесь сразу можно увидеть "тяжёлые" ассеты и добавить им сжатия.
2. Objects and Allocations
Показывает объекты Unity (Texture2D, Mesh, AudioClip, GameObject, ScriptableObject) и чистые C# объекты.
Здесь обычно ищут:
• дубли текстур
• Mesh’и с Read/Write
• «вечные» ScriptableObject
• коллекции, которые растут без очистки
3. Native Memory
Память движка и нативных структур: Shader, ComputeBuffer, RenderTexture и т.д.
Именно здесь чаще всего «утекают»:
• RenderTexture
• Shader Variant Collection
• Compute буферы
• GPU ресурсы, которые не освобождаются
4. Managed Objects (GC Heap)
Память .NET среды.
Тут можно найти:
• Списки, которые растут
• Dictionary, которые не чистят
• Объекты, удерживаемые статическими ссылками
• Лямбды, оставшиеся в событиях
Увидел "тяжёлые" ассеты в проекте - добавь им сжатия
Обнаружил дубляж ассетов - проверяй их загрузку/выгрузку
Просто смотри что жрёт больше всего памяти и найди способы оптимизации веса таких объектов.
Diff - один из самых полезных режимов.
Сразу видно:
• улучшения памяти в сравнении с предыдущим snapshot
• что новое появилось в памяти
• какие ассеты загружаются повторно
• какой тип объектов растёт быстрее всего
Совет - куда обращать внимание, что чаще всего жрёт память
• Текстуры - особенно UI, PNG без компрессии, включённые Read/Write (часто у Азиатских шрифтов TMPro)
• AudioClip - оставленные в RAM WAV-ки
• Meshes - включённый Read/Write Enabled
• Addressables - загрузили, но не выгрузили
• Коллекции - растут и никто не чистит
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #csharp #delegate #unity
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Что такое индексаторы (Indexers) в C#?
- Что такое расширяющие методы (Extension Methods) в C#?
- Что такое рефлексия (Reflection) в C#?
- Что такое многопоточное программирование в .NET?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Что такое индексаторы (Indexers) в C#?
- Что такое расширяющие методы (Extension Methods) в C#?
- Что такое рефлексия (Reflection) в C#?
- Что такое многопоточное программирование в .NET?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1👍1
#Собес #merge #rebase #history
🤔 В чём разница между git rebase и git merge?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 В чём разница между git rebase и git merge?
💬 Кратко:
git merge сохраняет историю параллельных веток, создавая merge-коммит при расхождении, а git rebase переписывает историю: переносит коммиты одной ветки поверх другой, создавая линейную историю без merge-коммитов. Merge показывает фактические ветвления, rebase упрощает лог, но меняет SHA коммитов.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#repository #шейдеры #начинающие
📚 3D Game Shaders for Beginners
Обучающий проект, посвящённый основам написания шейдеров для 3D‑игр. В нём пошагово разбираются ключевые техники компьютерной графики: от простейшего освещения и текстурирования до эффектов вроде нормал‑маппинга, отражения, преломления и постобработки. Материал подаётся в доступной форме с наглядными примерами на GLSL, сопровождается пояснениями принципов работы конвейера рендеринга и визуальными сравнениями «до/после». Проект ориентирован на начинающих разработчиков, которые хотят понять, как создавать и настраивать визуальные эффекты в играх.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 3D Game Shaders for Beginners
Обучающий проект, посвящённый основам написания шейдеров для 3D‑игр. В нём пошагово разбираются ключевые техники компьютерной графики: от простейшего освещения и текстурирования до эффектов вроде нормал‑маппинга, отражения, преломления и постобработки. Материал подаётся в доступной форме с наглядными примерами на GLSL, сопровождается пояснениями принципов работы конвейера рендеринга и визуальными сравнениями «до/после». Проект ориентирован на начинающих разработчиков, которые хотят понять, как создавать и настраивать визуальные эффекты в играх.
Перейти к материалу
👉 База вопросов 👉 Новости
👍1
#Собес #unity #csharp
🤔 Что делал, чтобы уменьшить мусор при инициализации Spine-анимаций?
💬 Кратко:
Чтобы уменьшить GC при инициализации Spine, использовал кэширование анимаций и скелетов, избегал частого создания/уничтожения Spine GameObject, применял object pooling для анимированных объектов, и минимизировал runtime изменения скинов и аттачментов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делал, чтобы уменьшить мусор при инициализации Spine-анимаций?
💬 Кратко:
Чтобы уменьшить GC при инициализации Spine, использовал кэширование анимаций и скелетов, избегал частого создания/уничтожения Spine GameObject, применял object pooling для анимированных объектов, и минимизировал runtime изменения скинов и аттачментов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🔥1
Frame Debugger - посмотри как рендерится твоя игра
Продолжаем разбирать инструменты для оптимизаций, и сегодня это Frame Debugger.
Если ты занимался оптимизацией рендера, то наверняка слышал про draw call’ы, батчинг. Возможно, глядел в окошко Stats, видел большое количество draw call, но не понимал, откуда они берутся.
Frame Debugger - инструмент, который показывает пошагово, как движок формирует кадр и почему какие-то вещи не батчатся.
👀 Что вообще можно увидеть в Frame Debugger?
Когда ты включаешь его, Unity ставит игру на паузу и показывает последовательность рендер-команд для формирования текущего кадра:
• Какие draw call’ы вызываются
• Какие материалы / шейдеры используются
• Какие объекты попали / не попали в батч
• Какие RenderPass’ы отработали
• Как влияет Canvas, UI, прозрачность, сортировка
Показывает дажи операции чистки экрана от прошлого кадра. Зайди, посмотри - это интересно!
🎯 Зачем Frame Debugger нужен?
1. Понять, почему что-то НЕ забатчилось
Очень частая проблема - ты вроде включил Static Batching или Sprite Atlas, но draw call’ы всё равно скачут.
Frame Debugger покажет причину в один клик:
• Разные материалы
• Разный порядок рендеринга
• Разные атласы
• Объект не помечен Static
• Включён/выключен SRP Batcher
• Прозрачность ломает батчи
Там буквально написано: "Why this draw call can't be batched with the previous one: ..."
2. Найти “скрытые” проблемы рендера
Frame Debugger отлично подсвечивает:
• Неверный порядок сортировки слоёв
• Лишние SetPass Calls
• Ненужные Blit’ы и копирование текстур
• Эффекты постобработки, которые вызывают лишние проходы
Когда понимаешь, как конкретно происходит рендеринг, оптимизация становится намного проще.
3. Посмотреть данные материалов, текстуры
Помимо показа последовательности построения объектов, Frame Debugger показывает, каким материалом с какими данными (все property и внутренние) объект отрисовывается. Это полезно, если какой-то объект отрисовывается не так, как предполагается. Например, имеет неожидаемый цвет или положение.
⚙️ Как пользоваться
1. Открыть: Window → Analysis → Frame Debugger
2. Нажать Enable
3. Иди по шагам смотреть каждый вызов
4. Кликать по draw call → изучать причину
Итог
Frame Debugger - крутой инструмент, который поможет разобраться в рендеринге игры и оптимизировать её. Это не только полезно, но и интересно!
А навык использования инструментов оптимизаций поможет на собеседовании и реальной работе.
Подробнее про FrameDebugger можно прочитать в документации Unity
🚀 Пост Guru Unity: @Minerope
Продолжаем разбирать инструменты для оптимизаций, и сегодня это Frame Debugger.
Если ты занимался оптимизацией рендера, то наверняка слышал про draw call’ы, батчинг. Возможно, глядел в окошко Stats, видел большое количество draw call, но не понимал, откуда они берутся.
Frame Debugger - инструмент, который показывает пошагово, как движок формирует кадр и почему какие-то вещи не батчатся.
Когда ты включаешь его, Unity ставит игру на паузу и показывает последовательность рендер-команд для формирования текущего кадра:
• Какие draw call’ы вызываются
• Какие материалы / шейдеры используются
• Какие объекты попали / не попали в батч
• Какие RenderPass’ы отработали
• Как влияет Canvas, UI, прозрачность, сортировка
Показывает дажи операции чистки экрана от прошлого кадра. Зайди, посмотри - это интересно!
🎯 Зачем Frame Debugger нужен?
1. Понять, почему что-то НЕ забатчилось
Очень частая проблема - ты вроде включил Static Batching или Sprite Atlas, но draw call’ы всё равно скачут.
Frame Debugger покажет причину в один клик:
• Разные материалы
• Разный порядок рендеринга
• Разные атласы
• Объект не помечен Static
• Включён/выключен SRP Batcher
• Прозрачность ломает батчи
Там буквально написано: "Why this draw call can't be batched with the previous one: ..."
2. Найти “скрытые” проблемы рендера
Frame Debugger отлично подсвечивает:
• Неверный порядок сортировки слоёв
• Лишние SetPass Calls
• Ненужные Blit’ы и копирование текстур
• Эффекты постобработки, которые вызывают лишние проходы
Когда понимаешь, как конкретно происходит рендеринг, оптимизация становится намного проще.
3. Посмотреть данные материалов, текстуры
Помимо показа последовательности построения объектов, Frame Debugger показывает, каким материалом с какими данными (все property и внутренние) объект отрисовывается. Это полезно, если какой-то объект отрисовывается не так, как предполагается. Например, имеет неожидаемый цвет или положение.
⚙️ Как пользоваться
1. Открыть: Window → Analysis → Frame Debugger
2. Нажать Enable
3. Иди по шагам смотреть каждый вызов
4. Кликать по draw call → изучать причину
Итог
Frame Debugger - крутой инструмент, который поможет разобраться в рендеринге игры и оптимизировать её. Это не только полезно, но и интересно!
А навык использования инструментов оптимизаций поможет на собеседовании и реальной работе.
Подробнее про FrameDebugger можно прочитать в документации Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #architecture #pattern
🤔 В чём смысл MVP/MV*?
💬 Кратко:
MVP/MV* - это подходы к организации кода, которые разделяют логику приложения на отдельные части. Они помогают сделать код более понятным и удобным для изменений. В игровой разработке это особенно полезно для отделения игровой логики от интерфейса. Такой подход упрощает тестирование и переиспользование кода.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 В чём смысл MVP/MV*?
💬 Кратко:
MVP/MV* - это подходы к организации кода, которые разделяют логику приложения на отдельные части. Они помогают сделать код более понятным и удобным для изменений. В игровой разработке это особенно полезно для отделения игровой логики от интерфейса. Такой подход упрощает тестирование и переиспользование кода.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #git_reset #git_merge
🤔 Что такое команды git reset --mixed и git merge --abort?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое команды git reset --mixed и git merge --abort?
💬 Кратко:
git reset --mixed: отменяет изменения, которые были добавлены в индекс, но сохраняет изменения в рабочем каталоге.git merge --abort: отменяет слияние, которое в данный момент находится в процессе, и возвращает репозиторий в состояние до начала слияния.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал