⚡️ Unity: игра весит слишком много? Шпаргалка по сжатию
Сохрани этот чек-лист! Пройди по каждому пункту — легко сбросишь 30-70% лишнего веса.
1️⃣ Editor → первым делом смотри сюда
📁 Размер сборки (Build Size Report)
ВкладкаConsole → переключи в режим Editor → выбери Add → Build Size Report.
После сборки появится детальный отчёт:что именно тянет больше всего МБ.
2️⃣ Текстуры — главный пожиратель места
🎯 Настройка для каждой текстуры:
· Max Size: Не ставь больше, чем нужно для экрана. UI? Часто хватит 512px.
· Compression: Используй ASTC для мобилок (качество/размер), DXT5 для ПК.
· Format: Всегда проверяй RGBA 32 bit → меняй на Compressed. В 4-8 раз меньше!
· Mip Maps: Отключай для UI и 2D-спрайтов. Они съедают ~30% памяти.
3️⃣ Аудио: пережатие всё решает
🔊 Идеальный профиль для мобильных игр:
· Load Type: Для коротких звуков — Decompress On Load. Для фоновой музыки — Streaming.
· Compression Format: Для большинства эффектов — Vorbis. Качество (Quality) ставь 0.5-0.7. Размер упадёт в разы!
· Force To Mono: Для 3D-звуков включи эту галочку. Размер ÷ 2.
4️⃣ Мусор в ассетах и настройках проекта
🗑️ Чистим лишнее:
· Unused Assets: Удали из проекта неиспользуемые материалы, префабы, скрипты. Поможет Asset Cleaner или вручную.
· Standalone Build Settings: Если делаешь мобильную игру — в Player Settings → Resolution and Presentation отключи все ненужные разрешения для десктопа.
· Strip Engine Code: Player Settings → Other Settings → галочка Strip Engine Code (может сломать рефлексию, тестируй!).
5️⃣ Оптимизация самой сборки (Build)
⚙️ Два ключевых выключателя:
· Build Compression: В окне Build Settings выбери Compression Method = LZ4HC (быстро) или LZMA (сильнее сжатие, но дольше распаковка).
· Create .apk (Android) вместо .aab для тестовых сборок, если не публикуешь в Google Play. Файл будет меньше.
✅ Итог: Сначала смотри Build Report, потом дави на текстуры и аудио. Часто этих двух шагов хватает, чтобы ужать игру в 2 раза.
💬 Сталкивался с гигантским размером? Как решил проблему?
🔔Подпишись — впереди много шпаргалок по оптимизации и не только!
👉Akrus Games | Unity
Сохрани этот чек-лист! Пройди по каждому пункту — легко сбросишь 30-70% лишнего веса.
1️⃣ Editor → первым делом смотри сюда
📁 Размер сборки (Build Size Report)
ВкладкаConsole → переключи в режим Editor → выбери Add → Build Size Report.
После сборки появится детальный отчёт:что именно тянет больше всего МБ.
2️⃣ Текстуры — главный пожиратель места
🎯 Настройка для каждой текстуры:
· Max Size: Не ставь больше, чем нужно для экрана. UI? Часто хватит 512px.
· Compression: Используй ASTC для мобилок (качество/размер), DXT5 для ПК.
· Format: Всегда проверяй RGBA 32 bit → меняй на Compressed. В 4-8 раз меньше!
· Mip Maps: Отключай для UI и 2D-спрайтов. Они съедают ~30% памяти.
3️⃣ Аудио: пережатие всё решает
🔊 Идеальный профиль для мобильных игр:
· Load Type: Для коротких звуков — Decompress On Load. Для фоновой музыки — Streaming.
· Compression Format: Для большинства эффектов — Vorbis. Качество (Quality) ставь 0.5-0.7. Размер упадёт в разы!
· Force To Mono: Для 3D-звуков включи эту галочку. Размер ÷ 2.
4️⃣ Мусор в ассетах и настройках проекта
🗑️ Чистим лишнее:
· Unused Assets: Удали из проекта неиспользуемые материалы, префабы, скрипты. Поможет Asset Cleaner или вручную.
· Standalone Build Settings: Если делаешь мобильную игру — в Player Settings → Resolution and Presentation отключи все ненужные разрешения для десктопа.
· Strip Engine Code: Player Settings → Other Settings → галочка Strip Engine Code (может сломать рефлексию, тестируй!).
5️⃣ Оптимизация самой сборки (Build)
⚙️ Два ключевых выключателя:
· Build Compression: В окне Build Settings выбери Compression Method = LZ4HC (быстро) или LZMA (сильнее сжатие, но дольше распаковка).
· Create .apk (Android) вместо .aab для тестовых сборок, если не публикуешь в Google Play. Файл будет меньше.
✅ Итог: Сначала смотри Build Report, потом дави на текстуры и аудио. Часто этих двух шагов хватает, чтобы ужать игру в 2 раза.
💬 Сталкивался с гигантским размером? Как решил проблему?
🔔Подпишись — впереди много шпаргалок по оптимизации и не только!
👉Akrus Games | Unity
🔥9❤2
⚡️ Unity: 4 средние по сложности функции C#, которые надо знать каждому (для новичков)
Сохраняй шпаргалку — это не база, а именно тот уровень, который отличает новичка от уверенного мидла. Употребляешь их — код становится чище, а задачи решаются быстрее.
1️⃣ LINQ: Where, Select, FirstOrDefault
📌 Зачем: Работа с коллекциями без велосипедных for и лишних списков.
🔸 Особенности:
· Всегда using System.Linq;
· Where — фильтрует. Select — преобразует. FirstOrDefault — находит первый или возвращает null.
· Не забывай .ToList() или .ToArray() в конце, если нужна новая коллекция, иначе получишь IEnumerable, который выполнится заново при каждом обращении.
· На больших данных или в Update() может просаживать производительность. Для критичных мест иногда лучше старый добрый цикл.
2️⃣ События (Events) с Action / Func
📌 Зачем: Чистая и безопасная реализация Observer паттерна. Развязывает связи между скриптами.
🔸 Особенности:
· Action — для void методов. Action<int> — для методов с параметром.
· Func<int, string> — когда нужно возвращать значение (последний тип-параметр — возвращаемый).
· Всегда отписывайся! (OnDisable, OnDestroy). Иначе будет утечка памяти и ошибки.
· ?.Invoke() — безопасный вызов, если на событие никто не подписан.
3️⃣ Coroutine + yield return новые инструкции
📌 Зачем: Сложные последовательности и тайминги.
🔸 Особенности:
· yield return new WaitForSecondsRealtime(time) — работает даже если Time.timeScale = 0 (для паузы).
· yield return new WaitUntil(() => condition) — ждём, пока условие станет true. Мощная штука!
· Корутину можно остановить StopCoroutine() или StopAllCoroutines().
· Не забывай проверять, активен ли объект (gameObject.activeInHierarchy), прежде чем начинать.
4️⃣ StringBuilder для динамических строк
📌 Зачем: Когда собираешь длинный лог, JSON, текст UI или много строк в цикле.
🔸 Особенности:
· using System.Text;
· В Update() или часто вызываемых методах обязательно использовать.
· Можно AppendLine(), AppendFormat(), Clear().
· Инициализируй с запасной ёмкостью, если знаешь длину: new StringBuilder(500).
✅ Знать эти функции — мало. Надо понимать когда и зачем их применять. Это и есть скилл.
💬 Какую из этих функций используешь чаще всего? Есть ли свои фишки?
🔔Подпишись — скоро разберём ещё одну пачку: от делегатов до асинхронных операций в Unity.
👉Akrus Games | Unity
Сохраняй шпаргалку — это не база, а именно тот уровень, который отличает новичка от уверенного мидла. Употребляешь их — код становится чище, а задачи решаются быстрее.
1️⃣ LINQ: Where, Select, FirstOrDefault
📌 Зачем: Работа с коллекциями без велосипедных for и лишних списков.
// Было:
List<Enemy> aliveEnemies = new List<Enemy>();
foreach (var enemy in allEnemies)
{
if (enemy.IsAlive) aliveEnemies.Add(enemy);
}
// Стало:
var aliveEnemies = allEnemies.Where(e => e.IsAlive).ToList();
🔸 Особенности:
· Всегда using System.Linq;
· Where — фильтрует. Select — преобразует. FirstOrDefault — находит первый или возвращает null.
· Не забывай .ToList() или .ToArray() в конце, если нужна новая коллекция, иначе получишь IEnumerable, который выполнится заново при каждом обращении.
· На больших данных или в Update() может просаживать производительность. Для критичных мест иногда лучше старый добрый цикл.
2️⃣ События (Events) с Action / Func
📌 Зачем: Чистая и безопасная реализация Observer паттерна. Развязывает связи между скриптами.
// Объявление события
public static event Action<Item> OnItemPickedUp;
// Вызов
void PickUp(Item item) {
OnItemPickedUp?.Invoke(item); // Проверка на null
}
// Подписка в другом скрипте
void OnEnable() => Player.OnItemPickedUp += HandlePickUp;
void OnDisable() => Player.OnItemPickedUp -= HandlePickUp; // ОТПИСКА ОБЯЗАТЕЛЬНА!
🔸 Особенности:
· Action — для void методов. Action<int> — для методов с параметром.
· Func<int, string> — когда нужно возвращать значение (последний тип-параметр — возвращаемый).
· Всегда отписывайся! (OnDisable, OnDestroy). Иначе будет утечка памяти и ошибки.
· ?.Invoke() — безопасный вызов, если на событие никто не подписан.
3️⃣ Coroutine + yield return новые инструкции
📌 Зачем: Сложные последовательности и тайминги.
IEnumerator AttackSequence() {
yield return new WaitForSeconds(1f); // Ждём секунду
PlayAnimation("Attack");
yield return new WaitForEndOfFrame(); // Ждём конец кадра
ApplyDamage();
yield return StartCoroutine(CooldownRoutine()); // Вкладываем одну корутину в другую
yield return null; // Ждём один кадр (устаревший вариант, лучше WaitForEndOfFrame)
}🔸 Особенности:
· yield return new WaitForSecondsRealtime(time) — работает даже если Time.timeScale = 0 (для паузы).
· yield return new WaitUntil(() => condition) — ждём, пока условие станет true. Мощная штука!
· Корутину можно остановить StopCoroutine() или StopAllCoroutines().
· Не забывай проверять, активен ли объект (gameObject.activeInHierarchy), прежде чем начинать.
4️⃣ StringBuilder для динамических строк
📌 Зачем: Когда собираешь длинный лог, JSON, текст UI или много строк в цикле.
// ПЛОХО (создаётся куча мусора):
string result = "";
for (int i = 0; i < 100; i++) {
result += i.ToString(); // КАТАСТРОФА ПРОИЗВОДИТЕЛЬНОСТИ
}
// ХОРОШО:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.Append(i);
}
string finalResult = sb.ToString();
🔸 Особенности:
· using System.Text;
· В Update() или часто вызываемых методах обязательно использовать.
· Можно AppendLine(), AppendFormat(), Clear().
· Инициализируй с запасной ёмкостью, если знаешь длину: new StringBuilder(500).
✅ Знать эти функции — мало. Надо понимать когда и зачем их применять. Это и есть скилл.
💬 Какую из этих функций используешь чаще всего? Есть ли свои фишки?
🔔Подпишись — скоро разберём ещё одну пачку: от делегатов до асинхронных операций в Unity.
👉Akrus Games | Unity
🔥7❤2 1
Маи чуваки. В канале проблема: люди отписываются и актив падает.
Что делать?
Оставлять ли образовательные посты(темы становятся сложнее и качество падает)?
Что делать?
Оставлять ли образовательные посты(темы становятся сложнее и качество падает)?
Anonymous Poll
65%
Оставлять
7%
Убрать(свой вариант в комментарии на что заменить)
28%
Оставить частично(свой вариант в комментарии что добавить)
Присылайте свои работы в комментарии!👊
Лучшие выложу здесь!
#работыПодписчиков
🎧Akrus Games | Unity
Лучшие выложу здесь!
По поводу вчерашнего опроса:
1. Буду публиковать какие нибудь девлоги
2. Будут больше интерактива
3. На первое время кол-во образовательных постов снизится
#работыПодписчиков
🎧Akrus Games | Unity
❤11🔥5 3
This media is not supported in your browser
VIEW IN TELEGRAM
Игра подписчика @ImCapibara
Канал: https://t.me/UmnayaCapibara
Присылайте свои игры сюда
Akrus Games | Unity
✨ Чуть-чуть вспотел, но удалось под новую систему и эту игру доделать поведение башни при передвижении.
Башня немного опережает корпус, корпус больше не имеет "атакующих" способностей, т.е. это больше не солдат.
+ башня поворачивается по локальному повороту, позже только порезать ей скорость, а то сильно быстрая и будет имба. ✔️
Канал: https://t.me/UmnayaCapibara
Присылайте свои игры сюда
Akrus Games | Unity
❤8🔥3 2
Игра подписчика @kyeyeORqueue
Канал: https://t.me/home_lilya
Присылайте свои игры сюда
Akrus Games | Unity
Механика открытия кейсов
Еще не та шляпа по размеру)
Канал: https://t.me/home_lilya
Присылайте свои игры сюда
Akrus Games | Unity
This media is not supported in your browser
VIEW IN TELEGRAM
Игра подписчика @viseweb
Канал: https://t.me/visedev
Присылайте свои игры сюда
Akrus Games | Unity
Звездный шутер с крутой оптимизацией для мобилок
Канал: https://t.me/visedev
Присылайте свои игры сюда
Akrus Games | Unity
❤10 3🤯1
Media is too big
VIEW IN TELEGRAM
Игра подписчика @ITerafy
Канал: @TerafyMain
Присылайте свои игры сюда
Akrus Games | Unity
Все хардкор моды PvZ в одном виде
Решили сделать одну из самых сложных игр с PvZ-тематикой (+ свои усложняющие механики, как передвижение животных по полю, особые боссы).
Но для проходимости и динамики игрок так-же сможет участвовать в сражении, стреляя курсором.
Следить за проектом можно будет тут - @TerafyMain
Канал: @TerafyMain
Присылайте свои игры сюда
Akrus Games | Unity
🔥9 2
Unity: enum, state и switch
Чтобы не было десяти миллионов if else, можно использовать Switch+enum. Рассмотрим на примере состояний:
Важно!
это не полная замена if/else, а частный случай для оптимизации при одномерном выборе.
Таким образом можно рассматривать состояния более оптимизированным способом. Попробуйте внедрить это в свой проект и код будет надежнее(компилятор предупредит о возможных проблемах), удобней(можно проще добавить новые состояния) и читаемее.
Akrus Unity
Чтобы не было десяти миллионов if else, можно использовать Switch+enum. Рассмотрим на примере состояний:
switch (state)//что рассматриваем
{
default:
case State.Idle:
//если idle, то ничего не делаем
break;//завершаем
case State.Roaming:
roamingTime -= Time.deltaTime;
if (roamingTime < 0)
{
Roaming();
roamingTime = roamingTimerMax;
}
//ecли roaming выполняем действие
break;
case State.Attack:
navMeshAgent.SetDestination(player_pos.position);
break;
}
Важно!
это не полная замена if/else, а частный случай для оптимизации при одномерном выборе.
Таким образом можно рассматривать состояния более оптимизированным способом. Попробуйте внедрить это в свой проект и код будет надежнее(компилятор предупредит о возможных проблемах), удобней(можно проще добавить новые состояния) и читаемее.
Akrus Unity
❤7🔥4 2 1
⚡️ Unity: Интерфейсы в C# — сила контрактов
Интерфейс — это контракт, который гарантирует, что класс умеет делать определённые действия. Неважно, кто его подписал — игрок, враг или бочка. Главное — они все могут выполнить условия контракта.
В интерфейсах в c# не принято делать реализацию функций, свойств, только объявление.
🔥 Зачем это в играх?
Допустим, у тебя есть меч, который может бить врагов и ломать бочки. Без интерфейсов — это ад из
Можно наследовать от любого количества интерфейсов, в отличии от наследования от классов.
Если мы хотим сделать приватное свойство для реализующего интерфейс класса, мы можем не указывать set в свойстве интерфейса
🎯 Реальный пример: взаимодействие с объектами
💡 Два главных плюса:
🔸 Гибкость — добавляй новые разрушаемые объекты без изменения кода меча
🔸 Чистота — избавляешься от гигантских цепочек проверок через GetComponent
🚀 Где ещё использовать?
•
•
•
💬 Используешь интерфейсы в своих проектах? Делися в комментах!
🔔 Подпишись — ещё больше C# фишек для геймдева
Пост помог написать @Nokskiy
👉Akrus Games | Unity
Интерфейс — это контракт, который гарантирует, что класс умеет делать определённые действия. Неважно, кто его подписал — игрок, враг или бочка. Главное — они все могут выполнить условия контракта.
В интерфейсах в c# не принято делать реализацию функций, свойств, только объявление.
🔥 Зачем это в играх?
Допустим, у тебя есть меч, который может бить врагов и ломать бочки. Без интерфейсов — это ад из
if (collider.GetComponent<Enemy>() != null)... С интерфейсами — чисто и гибко.Можно наследовать от любого количества интерфейсов, в отличии от наследования от классов.
Если мы хотим сделать приватное свойство для реализующего интерфейс класса, мы можем не указывать set в свойстве интерфейса
🎯 Реальный пример: взаимодействие с объектами
public class Bullet : MonoBehaviour
{
private const int _damage = 10;
private void CheckHit()
{
//проверка столкновений с IHealth
hitObj.TakeDamage(_damage);
}
}
public class Player : MonoBehaviour, IHealth
{
// Реализация свойства
public int Health { get; private set; }
// Прочие поля
// Прочии свойства
// Прочии функции
// Реализация функции
public void TakeDamage(int damage) =>
Health -= damage;
}
public interface IHealth
{
// Обьявление свойства Health
int Health { get; }
// Обьявление функции TakeDamage
void TakeDamage(int damage);
}
💡 Два главных плюса:
🔸 Гибкость — добавляй новые разрушаемые объекты без изменения кода меча
🔸 Чистота — избавляешься от гигантских цепочек проверок через GetComponent
🚀 Где ещё использовать?
•
IInteractable для взаимодействия с NPC, дверями, предметами•
ICollectable для сбора монет, аптечек, боеприпасов•
ISaveable для системы сохранений💬 Используешь интерфейсы в своих проектах? Делися в комментах!
🔔 Подпишись — ещё больше C# фишек для геймдева
Пост помог написать @Nokskiy
👉Akrus Games | Unity
❤7🔥3 3
Мы объединились и создали лучшую папку каналов по геймдеву "The Gamedev"!
Это место, где собраны самые полезные, активные и вдохновляющие каналы индустрии, где каждый разработчик найдёт для себя что-то действительно ценное:
Подключайтесь к папке The GameDev и станьте частью сильного комьюнити!
👉 https://t.me/addlist/rzxpwkhTW65hNDQy
Это место, где собраны самые полезные, активные и вдохновляющие каналы индустрии, где каждый разработчик найдёт для себя что-то действительно ценное:
🧑💻 Помощь и практические советы по разработке игр
🆓 Бесплатные раздачи ассетов и промокоды
📣 Актуальные новости геймдева
💰 Советы по заработку на разных игровых площадках
📱 Авторские каналы по геймдизайну
📸 Личные блоги разработчиков
Подключайтесь к папке The GameDev и станьте частью сильного комьюнити!
👉 https://t.me/addlist/rzxpwkhTW65hNDQy
🔥13❤6🤯2
Привет всем новым подписчикам! Я @akrus001 админ этого канала.
Вот сборка лучших обучающих постов
Чат канала @chatAkrus001
Админ @akrus001, по любым вопросам можете спросить.
Советую вам почитать предыдущие посты.
Надеюсь вам здесь понравится!
В это канале в основном публикуются обучающие посты. Иногда что-то более интерактивное.
Раз в неделю я делаю пост, куда можно прислать свои работы. Самые лучшие я опубликую в канал(классно сделал = бесплатная реклама)
Вот сборка лучших обучающих постов
Чат канала @chatAkrus001
Админ @akrus001, по любым вопросам можете спросить.
Советую вам почитать предыдущие посты.
Надеюсь вам здесь понравится!
🔥20❤4 3 1
Знаешь, когда два дня чинишь одну строку кода, а игра всё равно ломается? У меня так было с машинкой, которая кувыркалась на поворотах.
Я потратил 48 часов на поиск бага в физике. Проверил всё. А оказалось, что я использовал
Так вот, что здесь важно:
1. ForceMode в Unity — способ приложения силы.
2. Физику считают в
3. Дебаг начинай с простого. Я лез в дебри, не проверив базовое.
Как не сгореть? Чек-лист:
🔹 Таймер для перерывов. 25 минут работы, 5 минут отдыха.
🔹 Версия 0.1 должна быть уродливой, но работающей. Не гонись за идеалом сразу.
🔹 Геймдиз-док на одной странице. Если не объяснишь игру в трёх предложениях — утонешь.
🔹 Не создавай 1000 ScriptableObject’ов в одной папке. Группируй данные, иначе проект станет свалкой.
🔹 Ищи баг с конца. Начни с последнего изменения. Git — твой друг.
🔹 День без кода — это нормально. Решение часто приходит во время отдыха.
🔹 Показывай игру другу, даже сырую. Со стороны баги виднее.
Ошибки — это не «я плохой», а «я расту». Каждый найденный баг — новый уровень.
Было похожее? 💬 Напиши — разберём. Если тема зашла, сделаю серию про частые косяки. Держись! 🚀
Я потратил 48 часов на поиск бага в физике. Проверил всё. А оказалось, что я использовал
ForceMode.Impulse в FixedUpdate, и силы накапливались, создавая «толчки великана». Два дня — на одну строку. Когда нашёл, смеялся и плакал.Так вот, что здесь важно:
1. ForceMode в Unity — способ приложения силы.
Impulse мгновенно добавляет импульс, а в FixedUpdate он может вызываться слишком часто.2. Физику считают в
FixedUpdate, но осторожно.3. Дебаг начинай с простого. Я лез в дебри, не проверив базовое.
Как не сгореть? Чек-лист:
🔹 Таймер для перерывов. 25 минут работы, 5 минут отдыха.
🔹 Версия 0.1 должна быть уродливой, но работающей. Не гонись за идеалом сразу.
🔹 Геймдиз-док на одной странице. Если не объяснишь игру в трёх предложениях — утонешь.
🔹 Не создавай 1000 ScriptableObject’ов в одной папке. Группируй данные, иначе проект станет свалкой.
🔹 Ищи баг с конца. Начни с последнего изменения. Git — твой друг.
🔹 День без кода — это нормально. Решение часто приходит во время отдыха.
🔹 Показывай игру другу, даже сырую. Со стороны баги виднее.
Ошибки — это не «я плохой», а «я расту». Каждый найденный баг — новый уровень.
Было похожее? 💬 Напиши — разберём. Если тема зашла, сделаю серию про частые косяки. Держись! 🚀
❤18🔥4 3🎄1
Akrus Games | Unity
Photo
Игра подписчика @MounSword_Gtima
╭˚༓─━━┉Артефакт НОВА / Artifact NOVA┉━━─༓˚╮
(Игра от Mountain Sword Studio)
Артефакт НОВА, сюжетная игра в жанре 👁🗨 Психологического хоррора приключения 👁🗨, довольно короткая, но интересная история о неизвестности и таинственном артефакте. Среднее прохождение которой займёт у вас от 15 до 30мин.
📖Предыстория:
⌛️Пару лет назад Корпорацией НОВА обнаружен загадочный артефакт на дне [ЗАСЕКРЕЧЕННО] впадины, происхождение которого неизвестно, но предположительно он был создан древней расой. По некоторым причинам артефакт не удалось поднять на сушу, поэтому пришлось разворачивать базу вокруг артефакта. На данный момент последний отчёт который обещал что следующий отчёт откроет все тайны этого артефакта был отправлен 2 месяца назад, а станция перестала выходить на связь, но при этом подаёт знаки функционирования.
🔹Группа снабжения и проверки под вашим руководством будет отправлена на базу, дабы вы установили что случилось с базой и с группой учёных. Для дальнейших указаний свяжитесь с нами через консоль связи на базе...
Стили игры переплетаются с 2д и 3д. Так же в игре есть пару очень простых мини игр - головоломок.
✨✨Поиграть в игру можно на данных платформах: ✨✨
👁🗨 Yandex Games - телефон и PC
👁🗨 Itch,io - только PC (сайт заблокирован в России)
✨˚༓─━━┉Всем хорошего дня!┉━━─༓˚✨
🔥8❤3 2