Akrus Games | Unity
2.95K subscribers
408 photos
89 videos
11 files
351 links
Самые годные лайфхаки по unity c#

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
😎


У меня премка кончилась. Эмодзи к мемам не будет😭
1452
⚡️ Unity: шпаргалка по импорту изображений

Сохрани, чтобы не тратить часы на артефакты и размытые текстуры!

📌 2D Спрайты (UI, 2D игра)
1. Texture TypeSprite (2D and UI)
2. Sprite Mode:
* Один объект → Single
* Лист анимации → Multiple (не забудь Sprite Editor > Slice!)
3. Pixels Per Unit:
* Пиксель-арт: 16, 32, 64 (кратно размеру спрарита)
* HD графика: 100-200

📌 Текстуры для 3D
1. Texture TypeDefault
2. Wrap ModeRepeat (для тайлющихся поверхностей)
3. Filter ModeBilinear (стандарт), для пиксель-арта → Point (no filter)

🔥 Важные галочки:
* Generate Mip Maps — для 3D-объектов (сглаживание на расстоянии)
* sRGB — для цветных текстур, — для масок и карт нормалей
* CompressionHigh Quality для финальной сборки

💡 Совет: Всегда выставляй размер по степени двойки (512x512, 1024x1024) — это снимет 90% проблем со сжатием!

📂 Исходники в PNG — Unity любит его больше всего.

💬 А ты часто настраиваешь импорт текстур вручную?
🔔 Подпишись — еще больше шпаргалок по юнити впереди!
👉Akrus Games | Unity
8🎄111
🎨 Unity: как подбирать цвета для графики?

Сохрани — эти методы спасут тебя от хаотичных цветовых решений и помогут создать визуально целостную игру даже без дизайнерского опыта.

Метод 1: Готовые палитры — быстро и надёжно

Используй проверенные сайты с готовыми палитрами:

Lospec (https://lospec.com/palette-list) — здесь собраны палитры для пиксель-арта и низкополигональной графики. Идеально для ретро-стиля.
Coolors (https://coolors.co/) — генератор палитр. Жми пробел — получаешь новую комбинацию. Экспортируй в PNG или сохраняй HEX-коды.

💡 Как использовать в Unity:
1. Скопируй HEX-коды (например, #A3B2C1).
2. В инспекторе материала или UI-элемента вставь значение в поле цвета.

Метод 2: Создай свою палитру по принципу 60-30-10

Раздели цвета сцены на три группы:

60% — основной цвет (фон, земля, стены)
30% — дополнительный (персонажи, ключевые объекты)
10% — акцентный (интерактивные элементы, монеты, UI)

💡 Пример для платформера:
Основной — приглушённый синий (небо)
Дополнительный — тёплый серый (платформы)
Акцентный — яркий жёлтый (монеты)

⚠️ Что избегать:
• Слишком ярких и чистых цветов — снижай насыщенность (Saturation)
• Отсутствия контраста между фоном и игровыми объектами

📌 Краткий чек-лист:
1. Выбери стиль (ретро, низкополи, минимализм)
2. Возьми готовую палитру или создай по правилу 60-30-10
3. Настрой в Unity через Color Picker
4. Проверь, что важные элементы контрастируют с фоном

💬 А ты как подбираешь цвета? Делись своими палитрами в комментариях!
🔔 Подпишись — скоро расскажем про создание материалов в URP и Shader Graph

👉Akrus Games | Unity
10🎄21
⚡️ В каком порядке разрабатывать игру в Unity, чтобы не забросить через неделю

Сохраняй эту шпаргалку! Правильный порядок спасет от хаоса в папках, бесконечных переделок и потери мотивации. Два главных пути.

🎯 Вариант 1: Классический (от идеи к полишу)

Идеален для небольшой законченной игры. Шаг за шагом, без скачков.

1️⃣ Ядро геймплея (Core Gameplay Loop)

· Набросай сцену из кубов и сфер.
· Напиши самый базовый код для управления и основной механики (прыжок, стрельба, сбор).
· Цель: за 5 минут получить «игрушку», в которую уже можно поиграть. Если неинтересно даже на кубах — меняй механику.

2️⃣ Прототип уровня (First Playable)

· Создай один цельный тестовый уровень, используя простые ассеты (ProBuilder, бесплатные примитивы).
· Добавь все ключевые механики: победа, поражение, базовый UI (очки, здоровье).
· Протестируй на друзьях. Собери первую обратную связь.

3️⃣ Архитектура и системы (Backbone)

· Приведи код в порядок. Вынеси данные в ScriptableObject.
· Настрой менеджеры (Game Manager, Audio Manager, Pooling).
· Добавь систему сохранений. Это фундамент, который сэкономит тебе месяцы позже.

4️⃣ Контент и визуал (Content & Polish)

· Только сейчас подключай финальные 3D-модели, анимации, текстуры.
· Настрой постобработку, свет, VFX.
· Добавь звуки и музыку. Сделай Juice (эффекты реакции, экранные тряски, плавные переходы).

5️⃣ Тесты и публикация (Final Stage)

· Жесткое тестирование на разных устройствах и разрешениях.
· Собери все билды (PC, Android, WebGL).
· Подготовь описание, иконки, скриншоты для магазина (Google Play, Itch.io).

🚀 Вариант 2: Гибкая сборка (сборка из готовых систем)

Для гиперказуалки, мобильного раннера или если хочешь быстро собрать MVP.

1️⃣ Готовый движок (Template)

· Возьми официальный Unity Template (например, Platformer Microgame) или качественный ассет с кодом.
· Быстро пробегись по коду, пойми его архитектуру.

2️⃣ Быстрая модификация (Rapid Prototyping)

· Подставь свои спрайты/модели в готовые префабы.
· Измени ключевые параметры (скорость, сила прыжка, генерация) под свою идею.
· Замени UI-элементы. Получи уникальный вид за пару часов.

3️⃣ Кастомизация и масштабирование (Make It Yours)

· Добавь 1-2 свои уникальные механики в существующую структуру.
· Настрой монетизацию (рекламу, IAP) через готовые ассеты.
· Создай несколько уровней через простой редактор (используй данные в JSON или Excel).

4️⃣ Полировка и выпуск (Quick Polish)

· Сделай яркий UI и добавь сочные эффекты (DOTween, Particle System).
· Протестируй, исправь критические баги.
· Собери билд и выложи.

Главный совет: Не лезь в арт и сложный код, пока не доказал, что базовая механика «заходит». Итерации должны быть быстрыми. Версионируй проект (Git, Plastic SCM) после каждого крупного этапа.

📌 Сохрани эту схему, чтобы не потерять фокус.
💬А по какому пути идешь ты? Делись в комментариях!
🔔Подпишись — впереди ещё много четких гайдов.

👉Akrus Games | Unity
9🔥31
Unity: Addressable Assets — загрузка ассетов по-взрослому

Resources.Load устарел. Addressables — система для умной подгрузки чего угодно: сцены, префабы, аудио, конфиги.

Основная фишка: Ты грузишь ассет по строковому адресу (например, "Assets/Prefabs/Enemies/Dragon.prefab"). Система сама решает, откуда его взять: с диска, из локального кеша или с сервера.

Базовое использование:
1. Помечай любой ассет как Addressable (чекбокс в инспекторе).
2. Присвой ему адрес (например, "BigDragon").
3. Грузи в коде:
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>("BigDragon");
handle.Completed += (operation) => {
if (operation.Status == AsyncOperationStatus.Succeeded) {
GameObject dragon = operation.Result;
Instantiate(dragon);
}
};


Плюсы:
• Нет лимита Resources.
• Умное кеширование.
• Возможность хотфиксов (обновлять контент после сборки).
• Четкий контроль над памятью.

Переходи на Addressables в новом проекте — не пожалеешь.

📌 Подробный гайд по переходу с Resources — в следующих постах. Жди!
👉Akrus Games | Unity
81
🫡
83
Unity: [Editor] OnValidate() и его продвинутое применение

Не просто для проверки полей! OnValidate() вызывается при изменении скрипта в инспекторе или загрузке сцены. Идеально для автоматической настройки.

Используй для:
1️⃣ Валидации данных и автозаполнения.
public EnemyType type;
private SpriteRenderer _sprite;
void OnValidate() {
if (_sprite == null) _sprite = GetComponent<SpriteRenderer>();
_sprite.color = type.color; // Цвет меняется сразу в инспекторе!
}

2️⃣ Генерации уникальных ID для сохранения.
public string uid;
void OnValidate() {
if (string.IsNullOrEmpty(uid)) uid = Guid.NewGuid().ToString();
}

Важно: Не используй для игровой логики (не работает в билде!). Только для настройки в редакторе.

💬 Используешь OnValidate для чего-то ещё? Делися в комментах!
👉Akrus Games | Unity
6🔥321
Празднуем этот день, Роблокс заблокировали.
На этой платформе был большой онлайн, но там самые ужасные игры. Не в плане визуала, а в плане казуала. Типо лабубу кликер эволюция, но в него играют тысячу детсадовцев не напрягая мозг и не развиваясь

Короче туда дегенератов
176🔥421
Unity: Custom Editor — ускорь рутинную настройку

Тратишь часы на расстановку однотипных объектов? Напиши свой инструмент за 10 минут.

Задача: Есть скрипт SpawnPoint. Хочешь кнопку в инспекторе, которая ставит объект на землю (Raycast).

1. Создай скрипт редактора в папке `Editor/`:
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(SpawnPoint))]
public class SpawnPointEditor : Editor {
public override void OnInspectorGUI() {
DrawDefaultInspector(); // Рисует стандартные поля
SpawnPoint spawnPoint = (SpawnPoint)target;
if (GUILayout.Button("Поставить на землю")) {
Undo.RecordObject(spawnPoint.transform, "Move to ground");
if (Physics.Raycast(spawnPoint.transform.position, Vector3.down, out RaycastHit hit)) {
spawnPoint.transform.position = hit.point;
}
EditorUtility.SetDirty(spawnPoint); // Сохраняем изменение
}
}
}

2. Теперь в инспекторе компонента `SpawnPoint` появится твоя кнопка. Нажал — объект «упал» на коллайдер ниже.

С этим подходом можно: массово редактировать объекты, создавать свои слайдеры, визуализировать данные. Экономит кучу времени на дизайне уровней.

🚀 Автоматизируй рутину!
👉Akrus Games | Unity
5
🫡

Думаю, может провести розыгрыш какой-нибудь?
7222
Unity: Debug.Log — твой продвинутый инструмент отладки

Debug.Log("Работает!") — это база. Вот как выжать из него максимум.

1. Раскрась логи.
Передай второй аргумент — Color или Hex код (только в Editor!).
Debug.Log("<color=green>Зелёный: Всё ОК</color>", this);
Debug.Log("<color=#FFA500>Оранжевый: Внимание!</color>");


2. Выводи пути к объектам.
Debug.Log($"Объект {gameObject.name} уничтожен. Путь: {GetPath(transform)}");
string GetPath(Transform tr) => tr.parent == null ? tr.name : GetPath(tr.parent) + "/" + tr.name;

Это покажет полную иерархию Level/Enemies/Skeleton.

3. Используй условия и фильтры.
Debug.Log — дорогой вызов. Оберни его в #if UNITY_EDITOR или свой флаг.
public static bool debugMode = true;
// ...
if (debugMode) Debug.Log("Детальная инфа для отладки");

Убери галочку у debugMode в инспекторе — и спама в консоли не будет.

Логируй с умом, и консоль станет твоим лучшим помощником, а не свалкой текста.

📌 Сохрани шпаргалку!
👉Akrus Games | Unity
🔥4🎄41
😎

Как ваши успехи за этот день? Расскажите что получилось в комментариях!
😁72🔥1
👁️ Как создать «зрение» ИИ врага в Unity?

Легко!

Давайте рассмотрим процесс поэтапно:

1️⃣ 1. В двухмерном пространстве можно просто отправить один рейкаст в направлении игрока и проверить, происходит ли столкновение.
2️⃣ 2. Однако, если игрок слегка выглядывает из-за угла и его видно, то этот способ не подойдёт. В таком случае, следует отправлять несколько рейкастов веером и проверять, сталкиваются ли они с чем-либо.
3️⃣ 3. Но что делать в трёхмерном пространстве? Не отправлять же миллион рейкастов!

Для этого можно воспользоваться коллайдером, проверить столкновения и отправить пучок рейкастов!

---

"Все гениальное просто, все простое гениально"


👍 Ставьте лайк и подписывайтесь на канал!
#unity #charp #gamedev #ии #unity3d
5🔥41
⚔️ Unity: 3D или 2D? Выбирай правильное направление

Вечный вопрос для старта нового проекта. Кратко и по делу — чтобы ты не ошибся с выбором на старте.

🎨 Визуал и стиль

2D:
•Спрайты, пиксель-арт, вектор — полный контроль над каждым пикселем.
•Легче создать уникальный и цельный художественный стиль.
•Особенность: Вся «глубина» создаётся вручную (параллакс, слои).

3D:
•Объём, камеры с любого ракурса, динамическое освещение.
•Современный «AAA-вид» даже на простых моделях с постобработкой.
•Особенность: Требует навыков в моделировании, текстурировании, работе с освещением.

🎮 Геймдизайн и механики

2D:
•Идеально для платформеров, раннеров, казуальных и мобильных игр.
•Геймплей чаще линейный и сфокусированный.
•Фишка: Проще проектировать уровни и баланс — всё перед глазами.

3D:
•Полная свобода движения, открытые миры, сложные тактические бои.
•Механики могут быть глубокими (физика, стелс, исследование).
•Фишка: Сложнее отладить и сбалансировать — добавляется третья ось.

⚡️ Производительность и порты

2D:
•Меньше нагрузка на рендеринг — выше FPS на слабых устройствах.
•Проще портировать на мобилки и веб.
•Важно: Оптимизация спрайтов и анимаций — ключ к скорости.

3D:
•Автоматическая оптимизация (LOD, окклюзия) встроена, но её нужно настраивать.
•Тяжелее для мобилок — требует уменьшения полигонов, текстур, освещения.
•Важно: Пайплайн сложнее — от модели до импорта в Unity.

🚀 Сложность входа

2D:
•Проще начать: не нужны 3D-редакторы, можно рисовать даже в простых программах.
•Меньше подводных камней с камерой, управлением, физикой.
•Совет: Идеально для первого коммерческого проекта.

3D:
•Требует больше навыков: моделирование, UV-развёртка, скелетная анимация.
•Нужно разбираться в материалах, шейдерах, системах частиц для 3D.
•Совет: Выбирай 3D, если готов изучать Blender/Maya или работать в команде с художником.

Итог:
•Выбирай 2D, если делаешь игру в одиночку, хочешь быстрее выпустить продукт и фокусируешься на геймплее, а не на графике.
•Выбирай 3D, если цель — современная графика, глубокие механики движения/боя и есть время/ресурсы на освоение полного пайплайна.

💬 А ты за какой подход? Делись в комментах!
📌 Сохрани пост, чтобы не потерять перед стартом нового проекта.
🔔 Подпишись — больше жёстких сравнений и практических гайдов по Unity!

👉Akrus Games | Unity
4🔥1
Иметь пк в 2030: 😎
😁172
⚡️ 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
🔥92
⚡️ Unity: 4 средние по сложности функции C#, которые надо знать каждому (для новичков)

Сохраняй шпаргалку — это не база, а именно тот уровень, который отличает новичка от уверенного мидла. Употребляешь их — код становится чище, а задачи решаются быстрее.

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
🔥721
Маи чуваки. В канале проблема: люди отписываются и актив падает.
Что делать?
Оставлять ли образовательные посты(темы становятся сложнее и качество падает)?
Anonymous Poll
65%
Оставлять
7%
Убрать(свой вариант в комментарии на что заменить)
28%
Оставить частично(свой вариант в комментарии что добавить)
65
Присылайте свои работы в комментарии!👊
Лучшие выложу здесь!


По поводу вчерашнего опроса:
1. Буду публиковать какие нибудь девлоги
2. Будут больше интерактива
3. На первое время кол-во образовательных постов снизится

#работыПодписчиков

🎧Akrus Games | Unity
11🔥53
This media is not supported in your browser
VIEW IN TELEGRAM
Игра подписчика @ImCapibara
Чуть-чуть вспотел, но удалось под новую систему и эту игру доделать поведение башни при передвижении.

Башня немного опережает корпус, корпус больше не имеет "атакующих" способностей, т.е. это больше не солдат.

+ башня поворачивается по локальному повороту, позже только порезать ей скорость, а то сильно быстрая и будет имба. ✔️

Канал: https://t.me/UmnayaCapibara
Присылайте свои игры сюда
Akrus Games | Unity
8🔥32