Devlog без QA | Розробка ігор – Telegram
Devlog без QA | Розробка ігор
641 subscribers
204 photos
61 videos
402 links
Unity/Новини/Ідеї/Натхнення й інший якісний (а можливо і не дуже) контент тут!

Зв’язок: @DevAndrew

Анти-скам бот: @IndieSafeBot
Download Telegram
Як механіка народжує жанр
Деякі жанри не були придумані «згори» - вони виросли з однієї ключової механіки, яка виявилася настільки потужною, що стала основою десятків ігор. Ось приклади:

🎲 Роґлайк (roguelike)
Механіка: процедурна генерація + перманентна смерть
🔁 Основна ідея: кожен забіг унікальний, гравець починає з нуля, але знання гри ключ до перемоги.
👉 Гра Rogue (1980) задала шаблон. Пізніше механіку адаптували у Dead Cells, Hades, Slay the Spire.

🗺 Метроїдванія (Metroidvania)
Механіка: обмежений доступ до областей через прогрес (ability gating)
🧩 Гравець досліджує великий світ, але дістатися до певних зон можна лише після здобуття нових здібностей.
👉 Назва жанру походить від Metroid і Castlevania: Symphony of the Night.

Автобатлер (Auto Battler)
Механіка: автоматичні бої + стратегічне формування команди
🤖 Гравець розміщує юнітів на полі бою, а потім дивиться, як ті б’ються самостійно. Тактика у виборі, а не в керуванні.
👉 Auto Chess, Teamfight Tactics, Dota Underlords - усе почалось зі звичайного модифікатора.

📌 Висновок:
Одної механіки іноді достатньо, щоб створити цілий жанр. Але для цього вона має бути:
🔹 достатньо цікавою
🔹 гнучкою для варіацій
🔹 і викликати в гравця глибокий цикл задоволення

💻 | GAMEDEV UA | #запитання #жанр #механіка #gamedev
3🔥2
💨 Хочеш додати в гру дим, який виглядає просто вау і ще й взаємодіє з об’єктами?

Це симуляція на базі роботи Йоса Стама, легенди в темі ріалтайм-флюїдів для ігор.
🔬 Дим не просто гарно виглядає, а ще й фізично взаємодіє з середовищем! 🔥

📼 [Переглянути відеоролик] ▶️

💡 Підійде для VFX, вибухів чи просто атмосфери в грі.

💻 | GAMEDEV UA | #туторіал #дим #smoke
5👍2
Як дрібниці роблять гру цікавішою?

Деталі не просто доповнюють гру вони можуть вивести її на новий рівень. Це ті маленькі штуки, які гравець може й не помітити свідомо, але які створюють відчуття "ця гра кайф".

Ось як саме це працює:

🎵 Звук дії = відчуття контролю
Клікнув — почув клац. Стрибнув — почув вжух. Звуковий фідбек миттєво посилює відчуття “я щось зробив”.

🌀 Анімації створюють живий світ
Навіть просте збільшення кнопки при наведенні або хитання дерев у фоні змушує гру здаватися об’ємною та “живою”.

🧠 Мікро-реакції персонажа = емпатія
Персонаж чухає потилицю, позіхає, озирається… і ти вже відчуваєш, що це не просто модель, а хтось "справжній".

🧩 Контекстні дрібниці додають глибину
Нестандартний опис предмета, жарт в підказці, кумедна помилка в меню — усе це змушує посміхнутися й полюбити гру ще більше.

🌈 Атмосфера народжується з дрібниць
Пил у світлі, дрібний дощ, звуки далекого міста, відлуння кроків — усе це створює емоцію, навіть якщо геймплей простий.

Гравці точно згадають, як було приємно просто бути в цьому світі. А це вже робота дрібниць.

🔍 А які деталі найбільше запам’ятались тобі в улюбленій грі? Пиши у коментарях 👇

💻 | GAMEDEV UA | #запитання #геймдизайн #дрібниці #деталі
8🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
GBCamera for Unity

Пакет Unity, що містить налаштування камери для імітації візуальних ефектів у стилі GameBoy.

Завантажити 👈

💻 | GAMEDEV UA | #корисне #GBCamera #інструменти
5
🎮 Unlocking C# 10 in Unity: Як використовувати record та record struct

Unity 6 підтримує можливості C# 10, як-от record, record struct, with-вирази та global using, але їх потрібно ввімкнути вручну.

🧠 Навіщо це потрібно?
C# 10 додає зручний синтаксис для record та record struct, ідеальних типів для зберігання ігрових даних:
- record — це референсний тип з value-поведінкою (порівнюються за значенням, а не за посиланням)
- record struct — це значимий тип (struct), але з тією ж приємною поведінкою та компактністю

Обидва надають:
• Автоматичне Equals() / GetHashCode()
• Зручне копіювання через with:
var newConfig = oldConfig with { Speed = 10 };


▶️ [Детальніше тут] 👈

📦 Коли використовувати?

record/record struct особливо корисні в тих випадках, коли потрібно працювати з даними, що не змінюються після створення. Вони чудово підходять для зберігання налаштувань рівня, конфігурацій гравця або UI. Також їх зручно використовувати для передачі станів між системами, де важлива простота, передбачуваність і відсутність зайвої логіки в самих об'єктах.

🚀 Також можна скористатися global using, щоб прибрати дублювання using-директив у кожному файлі:
global using UnityEngine;
global using System.Collections.Generic;

Це спрощує архітектуру проєкту та підвищує читабельність коду.

💻 | GAMEDEV UA | #уроки #CSharp #RecordStruct #CleanCode #GlobalUsing
🔥31
🎯 Як зробити вказівник напрямку до цілі в Unity (із відстанню та орієнтацією)

📍 Ідеально для квестів, цілей, скринь або будь-яких об’єктів, до яких гравець має дійти.

У цьому уроці розглянуто, як створити UI-індикатор, що:
• Завжди вказує у напрямку до цілі
• Показує відстань до неї в реальному часі
• Розміщується поверх усього іншого, щоб бути завжди видимим

📌 Підходить для квестів і цілей на великій мапі, прихованих або недосяжних об’єктів, а також для орієнтації гравця у відкритому світі.

📼 [Переглянути туторіал] ▶️

💡 Такий підхід значно покращує орієнтацію в грі та полегшує навігацію для гравця.

💻 | GAMEDEV UA | #туторіал #вказівник #Навігація
5👍1
🔍 [SerializedField], [Header], #region, event в Unity — не просто декорації!

Ці “маленькі речі” можуть значно поліпшити якість коду, зручність роботи в інспекторі та структуру проєкту. Якщо пишеш скрипти в Unity — без них як без кави зранку ☕️.

🧠 Що таке [SerializedField]?
Це атрибут, який дозволяє бачити приватні змінні в інспекторі.
Тобто змінна залишається закритою для інших класів, але її можна налаштувати в Unity.
[SerializeField] private float speed = 10f;

Перевага: інкапсуляція + гнучкість у редакторі.

📌 [Header("Твій заголовок")]
Додає зручні підписи до блоків змінних в інспекторі.
[Header("Налаштування руху")]
[SerializeField] private float speed;

Перевага: чистіший і зрозуміліший інспектор.

📦 #region ... #endregion
#region Рух гравця
void Move() { }
#endregion

Перевага: менше хаосу в редакторі.

🔄 OnEnable, OnDisable, OnDestroy — ключі до контролю життєвого циклу!
Ці методи допомагають керувати поведінкою компонентів у потрібний момент:

private void OnEnable() { }  // Коли об'єкт або скрипт активуються  

private void OnDisable() { } // Коли об'єкт або скрипт деактивуються

private void OnDestroy() { } // Перед остаточним знищенням об'єкта


Переваги: ідеально підходять для підписки та відписки від івентів, запуску та зупинки корутин або очищення ресурсів, що запобігає помилкам і витокам пам’яті.

💡 Висновок:
Ці прості інструменти як порядок у шафі: не обов'язкові, але неймовірно спрощують життя.


💻 | GAMEDEV UA | #уроки #SerializedField #CodeQuality
5👍1
Sc-Fi pack

Можливо комусь пригодиться 👇

Завантажити ▶️

💻 | GAMEDEV UA | #корисне #аудіо
25
💥 ТОП-7 помилок початківців у розробці ігор

Розробка ігор це кайф, але на старті багато хто залітає в ті самі пастки.
Хочеш зробити свою першу гру? Тоді читай, як не зламатися ще до релізу 👇

🎯 1. Починають з “своєї мрії” — одразу AAA
"Мій перший проєкт — це відкритий світ, сюжет, мультиплеєр, RTX, 100 годин контенту…"
Звучить круто, але це прямий шлях до вигорання.
Почни з малого. Навіть простий клон гри уже досвід, особливо на початку шляху.

🧱 2. Відсутність базового плану
Пишуть код “на ходу”, без прототипів і етапів.
Потім самі не розуміють, що роблять.
Навіть простий список задач у блокноті/word-і вже рятує.

🚫 3. Ігнорують прототипування
Тижнями малюють меню, а геймплей ще не працює.
Спочатку: "А чи цікаво це грати?"
Графіка почекає.

👾 4. Занадто складна механіка на старті
Роблять інвентар, систему прокачки, онлайн-магазин усе одразу.
80% не доходять навіть до ігрової петлі.
Спочатку зроби базову ідею, а потім навішуй функції.

🧠 5. Не тестують на реальних людях
"Я сам знаю, що це круто". Але грати ніхто не хоче.
Дай гру друзям, геймдев-спільноті головне, фідбек.

🐌 6. Не думають про оптимізацію (Таке буває?)
Навіть 2D-гру можна змусити лагати, якщо ігнорити продуктивність.
Мінімальна увага до ресурсів = максимум шансів на стабільний проєкт.

📦 7. Відсутність порядку в проєкті
Код без коментарів, активи без структури, хаос у назвах.
Порядок сьогодні — спокій завтра.

💡 Висновок:
Усі помиляються. Але краще на чужих помилках, ніж на своїх нервах.
Не починай з “мега-гри”. Почни з гри, яку реально завершити. Окремо виділити хотілось би другий пункт.

Навіть простий список типу:

меню → геймплей → рівні → перемога/поразка - вже вирівнює фокус, економить час і зменшує стрес.

А розкажіть про свій досвід у розробці перших ігор. Як це відбувалось? Пишіть нижче 👇

💻 | GAMEDEV UA | #запитання #першагра #помилки
8👍4💩1
🧠 Переосмислення архітектури в Unity: від монобехів до чистої логіки

MonoBehaviour — це базовий клас Unity, від якого успадковуються всі скрипти, що працюють з об’єктами на сцені. Саме MonoBehaviour дає доступ до таких важливих подій, як Start(), Update(), OnTriggerEnter() та інші, і відповідає за зв’язок коду з ігровим світом Unity.

Але MonoBehaviour — це не сама логіка гри, а лише оболонка, яка з’єднує чисті дані та бізнес-логіку з ігровою сценою. Тож важливо не «запихати» всю логіку в один монобех, а розділяти відповідальність.

Замість «об’єкт на сцені робить усе» варто мислити гру як набір даних і систем, які їх обробляють. Цей підхід схожий на MVC, MVVM чи ECS, де логіка й дані важливіші за візуалізацію.

Новачок пише все в Player.Update(), досвідчений розробник розділяє: дані в одному місці, логіку в системах, а представлення окремо.

🧩 Розділення відповідальності: SRP та відмова від моноліту
Одне з головних правил — Single Responsibility Principle (SRP): кожен клас має відповідати лише за одну конкретну задачу. Проблема Unity-початківців, що всі функції збираються в один великий MonoBehaviour.

Краще мати кілька маленьких класів, наприклад: MovementController, WeaponController, Health. Навіть якщо це MonoBehaviour-компоненти — вони розподіляють обов’язки, легше їх тестувати і підтримувати.

🔄 Практичний приклад: від монобеха до чистого класу
Уявімо клас здоров'я героя:
public class Enemy : MonoBehaviour {
public int maxHP = 100;
private int currentHP;

void Start() {
currentHP = maxHP;
}

public void TakeDamage(int damage) {
currentHP -= damage;
if (currentHP <= 0) {
Die();
}
}

void Die() {
Destroy(gameObject);
}
}

Тут логіка і дані змішані, тестувати складно, повторно використовувати теж.

Після (логіка у чистому класі, MonoBehaviour лише оболонка):
using System;

public class Health {
public int MaxHP { get; }
public int CurrentHP { get; private set; }

public event Action OnDeath;

public Health(int maxHP) {
MaxHP = maxHP;
CurrentHP = maxHP;
}

public void TakeDamage(int damage) {
CurrentHP -= damage;
if (CurrentHP <= 0) {
OnDeath?.Invoke();
}
}
}

public class HealthBehaviour : MonoBehaviour {
private Health health;

void Start() {
health = new Health(100);
health.OnDeath += Die;
}

void Die() {
Destroy(gameObject);
}

public void TakeDamage(int dmg) {
health.TakeDamage(dmg);
}
}

🚀 Як перейти від монобеха до чистих класів?
Основна ідея: логіку і дані винести в звичайні C# класи, а MonoBehaviour зробити тонким «містком» між грою і Unity.
• Визначте основні підсистеми: рух, здоров'я, атака, інвентар тощо
• Для кожної зробіть окремий клас без MonoBehaviour
• У MonoBehaviour створюйте їхні екземпляри і делегуйте їм роботу
• Залишайте Unity-специфічні речі (Instantiate, Destroy) у MonoBehaviour
• Використовуйте події для повідомлення про зміни

⚠️ Чому варто уникати Singleton’ів на MonoBehaviour?
Singleton виглядає зручно глобальний доступ через Instance. Але це призводить до:
• Скритих залежностей і проблем підтримки
• Порядку ініціалізації, який важко контролювати
• Ускладнення тестування
• Перевантаження одного класу всіма функціями — «God Object»
• Краще явно передавати залежності через поля або конструктори, використовувати події і сервіси.

🌟 Підсумок

MonoBehaviour — це лише місток до Unity-сцени, тож основну логіку, дані й процеси варто виносити у чисті C# класи. Розділяйте відповідальність між маленькими спеціалізованими класами, використовуйте події для зв’язку з Unity і уникайте синглтонів, так код буде легше тестувати й масштабувати.

💻 | GAMEDEV UA | #уроки #OOP #SRP #ECS #CodeDesign #Оптимізація
5👍4🔥2
Народ, привіт! 👋

Хочу поділитися телеграм-каналом одного українського ютубера, який створює крутий контент про геймдев українською мовою 🇺🇦

Нещодавно натрапив на його відео, подивився кілька роликів і справді вражений. Він розповідає про розробку ігор, ділиться фішками, власним досвідом, розбирає цікаві теми і все це зрозуміло, без води і при цьому з душею.

У своєму телеграм-каналі він публікує:
- новини про вихід нових відео,
- власні думки та поради з розробки,
- корисні посилання та ресурси,
- відповідає на коментарі й просто тримає зв'язок із підписниками.

Дуже круто, що з’являється все більше якісного україномовного контенту про геймдев, тож раджу підтримати! 👇

PNG / Project new generation
6👍2
🛑 Unity знову вирішив "покращити", але отримав по шапці від спільноти [Джерело]

Нещодавно в Unity Hub зникла можливість створювати офлайн-проєкти. Усі нові проєкти автоматично під’єднувались до Unity Cloud, хочеш ти того чи ні ☁️

🤦 Це викликало хвилю критики: користувачі звинуватили Unity у нав’язуванні хмарних сервісів і контролю над даними розробників.

🔁 Добре, що спільнота не мовчала! Після активного фідбеку Unity офіційно заявили:
“Ми почули вас. Користувачі мають мати контроль над своїми даними.”


👉 Функцію створення локального проєкту повернули.

Тепер при створенні нового проєкту з’явилась опція “Create New Local Project”

😬 Але є нюанс — вона захована:
• Спочатку вводиш назву проєкту.
• Потім треба прокрутити випадаючий список до самого низу, щоб побачити потрібний пункт.

Це рішення виглядає як "темний шаблон" UI — неочевидне, заплутане й незручне. Сподіваємось, це лише тимчасово.

Скандал, звісно, не як з Runtime Fee, але осад лишився.

💻 | GAMEDEV UA | #новини #unity
👀103
🚨 УВАГА! УВАГА! ТЕРМІНОВО! 🚨

Надурив один "рекламодавець"

Домовились про покупку реклами. Він надав повний комплект доказів — скріни, логін, голосові повідомлення, а найголовніше відповів із Telegram-аккаунта, вказаного в описі під його відео. Тобто всі ознаки того, що це його канал, були підтверджені, і спілкування проходило цілком нормально.

Також написав 1-2 людям, які до цього купляли рекламу, сказали, що все було ок.

Після того я відправив гроші, але рекламу так і не зробили. На мої повідомлення він вже не відповідає — повний ігнор. Ми спілкувалися приблизно місяць після оплати і більшу частину часу він годував мене "завтраками". Єдине, що писав це просьба типу: "треба скинути гроші монтажерові", хоча я не був зобов’язаний це робити, це була лише його власна просьба.

‼️ Прошу всіх, будь ласка, зайдіть на його канал і киньте скаргу. Це дуже важливо, щоб він не обманював інших і щоб отримав по заслугам. Якщо кожен хто це прочитав виділить хвилинку часу для скарги - цього буде достатьно.

🔎 Якщо потрібні докази, скріни, переписки, все є, можу скинути в особисті. Напишіть мені, якщо це вам справді потрібно.

Посилання на канал 👉 Скарги сюди 👈

🙏 Дякую кожному, хто не пройде повз.
8🤯2
📊 Чому планування — основа успішної гри?

Одну з найпоширеніших помилок серед розробників (особливо інді) можна описати просто: сіли й одразу почали щось кодити. Без чіткого плану, без структури, без розуміння, що буде завтра.

Але через тиждень-два починається класика:
🔸 виникає купа незв’язаної логіки
🔸 нові фічі ламають старі
🔸 частину треба викидати й переробляти
🔸 мотивація падає, бо все «йде не туди»
🔸 а іноді просто здаєшся

І саме тут вирішальну роль відіграє планування. Це не про те, щоб зробити ідеальну GDD на 50 сторінок. Це хоча б про:
чітке розуміння цілей
розподіл функціоналу на етапи
базову архітектуру коду
список фіч — основних і другорядних
і приблизні дедлайни, навіть умовні

Якщо тільки починаєш — зупинись на годину-дві, сядь і пропиши собі все по пунктах. Це зекономить десятки годин у майбутньому.

🎥 Відео українськомовного ютубера на цю тему, де детально розглядається важливість планування, типові помилки й поради:

🔗 [Відеоролик] 👈

💻 | GAMEDEV UA | #запитання #планування
5🔥3
🔥 5 лайфхаків для маркетингу інді-ігор від Кріса Зуковського (Steam експерт)

Кріс Зуковський — спеціаліст із просування в Steam — нещодавно поділився у прямому ефірі від Unity найефективнішими рекомендаціями для інді-розробників.

📺 Весь стрім з Кріcом Зуковським можна подивитися тут 👈

Ось головне з його інтерв’ю:

1️⃣ Вибір жанру визначає маркетинг
Жахи та стратегічні симулятори будівництва зараз на піку популярності. Це маркетингове рішення потрібно приймати одразу, а не після створення гри.

2️⃣ Оптимізація сторінки Steam
У вас є кілька секунд, щоб зачепити гравця. Найкраще — найняти ілюстратора для професійних скриншотів і мініатюр, а не користуватися стандартними скриншотами або простими написами.

3️⃣ Типові помилки інді-розробників
• Не ігноруйте анонси — створення сторінки в Steam вже є анонсом гри.
• Використовуйте всі інструменти Steam, зокрема надсилайте листи тим, хто додав гру у вішлист.
• Правильно ставте теги, щоб збільшити видимість.

4️⃣ Готуйтесь до Steam Next Fest заздалегідь
Демоверсія має бути готова і без багів до початку фестивалю, щоб створити імпульс і зібрати велику аудиторію.

5️⃣ Витрачайте бюджет розумно
Основна інвестиція — ілюстратор для якісного візуалу. Решта маркетингу — це стратегія та робота з безкоштовними інструментами.

💻 | GAMEDEV UA | #запитання #маркетинг #steam
🔥71
🧠 C# / Unity: Що таке IDisposable і як він зробить твій код кращим?

🛠 Патерн IDisposable — це корисний інструмент для розробки чистого, контрольованого коду в C#. Особливо він стає у пригоді в ігровій розробці на Unity, де важливо правильно керувати ресурсами, підписками на події та життєвим циклом об’єктів.

🔍 Що таке IDisposable?
IDisposable — це інтерфейс, який дозволяє класу реалізувати метод Dispose(). Його основна мета звільняти ресурси вручну, коли вони більше не потрібні.

Приклади ресурсів, які потрібно чистити:
• підписки на події (+=)
• файлові дескриптори
• сокети
• обробники таймерів
• кешовані або тимчасові об'єкти

🔄 Навіщо це в Unity?
У Unity багато об’єктів (особливо ті, що не є частиною сцени або використовуються як менеджери) не очищаються автоматично, що може призвести до:
• витоків пам’яті,
• завислих подій (які продовжують викликатися),
• труднощів при перезапуску сцен або об'єктів.

Патерн IDisposable дозволяє контролювати життєвий цикл об’єктів та чітко вказати, коли об’єкт повинен "прибрати за собою".

📦 Як виглядає реалізація?
public class Example : IDisposable
{
public Example()
{
// Наприклад, підписка на подію
GameEvents.OnSomethingHappened += OnEvent;
}

public void Dispose()
{
// Обов’язково: відписка
GameEvents.OnSomethingHappened -= OnEvent;
}

private void OnEvent()
{
Debug.Log("Подія оброблена");
}
}

Unity-приклад: використання в MonoBehaviour
public class ScoreHandler : MonoBehaviour
{
private ScoreListener listener;

void Start()
{
listener = new ScoreListener(); // створюємо об’єкт, який підписується на події
}

void OnDestroy()
{
listener.Dispose(); // відписуємося — уникнення витоків
}
}

Це дуже зручно для тимчасової логіки або одноразових сервісів (UI-повідомлення, кеш об'єктів, мережеві запити тощо).

🧩 Коли використовувати в ігрових проєктах
Патерн особливо корисний у класах, які підписуються на глобальні події — це дозволяє вчасно відписуватись і уникати небажаних викликів. Також його варто застосовувати в менеджерах, що працюють із потоками, файлами або іншими зовнішніми ресурсами. Він добре підходить для сервісів зі сценарієм "створення — використання — знищення", як-от кеші або UI-компоненти. Крім того, IDisposable допомагає реалізувати чистий перезапуск сцени: спершу Dispose, потім Unload і лише після цього Reload.

▶️ [Детальніше тут] 👈

💻 | GAMEDEV UA | #уроки #IDosposable #очищення #кеш
🔥7👍21
🚧 Unity 3D – Як зупинити об'єкти від проникання крізь стіни

🎮 Якщо в твоїй грі об'єкти "провалюються" або "врізаються" в стіни, це відео саме те, що треба. Тут розповідається, як уникнути кліпінгу (clipping), коли моделі перетинаються одна з одною в неналежний спосіб.

Це особливо корисно для:
• гравців, які підходять близько до стін;
• предметів, що рухаються фізикою;
• колізій між NPC та оточенням.

▶️ [Unity 3D - How to stop objects from clipping into walls] 👈

💻 | GAMEDEV UA | #туторіал #clipping
10👍1
🎯 Хочеш додати Квестову Систему до свого RPG в Unity?

Серія відео, де покроково показано, як реалізувати повноцінну систему квестів.

🔧 Що навчишся:
1️⃣ UI — створення інтерфейсу для журналу квестів
2️⃣ Quest Log — зберігання і відображення активних/виконаних квестів
3️⃣ Scriptable Objects — зберігання опису, цілей та нагород
4️⃣ Прогрес квестів — прийняття, відстеження та завершення
5️⃣ Інтеграція з діалогами — видача квестів через NPC
6️⃣ Меню — перемикання між вкладками: Статистика, Навички, Квести

📺 [Переглянути серію] 👈

🧩 Ця система об’єднує діалоги, інвентар, навички та UI в єдину RPG-структуру.

💻 | GAMEDEV UA | #туторіал #quest #questsystem #квестсистема
👍5🔥31🥰1
⚖️ Як робити баланс у грі: просто про складне

Баланс це коли в грі:
• немає «оп» тактик;
• гравець не злітає від складності;
• прокачка не знищує інтерес;
• кожне рішення має вагу.

Але зробити його — пекельно складно. Навіть в простих іграх: скільки потрібно монет на апгрейд? Скільки ХП має бос? Коли гравцю стане нудно?

📊 1. Баланс це система, а не відчуття
Помилка багатьох початківців: «все відчувається норм, бо я грав 100 разів». Але це суб’єктивно.

👉 Реальний баланс — це числа + закономірності.
Все, що ти даєш гравцю (золото, дмг, бусти) — має рахуватися.

🔧 Приклад:
Якщо твій ворог має 100 HP, а зброя наносить 12 dps, а апгрейд збільшує на 20%, все це має вкладуватись у контрольований прогрес, а не «якось по фану».

📈 2. Створюй баланс як економіку
У більшості ігор є своя «економіка». Навіть у платформері з монетками.

Питання, які варто задати:
• Скільки гравець заробляє за сесію?
• Скільки потрібно для апгрейду/розблокування?
• Чи не можна одразу все купити?
• Чи є відчуття прогресу?

✍️ Наприклад:
Якщо апгрейд коштує 500, а гравець отримує по 50 за рівень — він має пройти 10 рівнів. Норм? Чи задовго?


🔁 3. Створи криву прогресу

Неважливо, це HP ворогів чи ціна прокачки — все має змінюватися поступово.

🔺 Зазвичай використовують:
• Лінійне зростання: x = x + 10
• Експоненційне: x = x * 1.2
• Кастомну криву

🧠 Порада:
Почни з таблиці Excel або Google Sheets, пропиши 30 рівнів HP, цін, доходу.
Подивися на тренди. Якщо на 15 рівні потрібно 5 годин гринду — перепиши.

⚔️ 4. Уникай «оптимальної» стратегії
Баланс має змушувати думати, обирати, адаптуватись, а не просто качати один скілл або купити одну найкращу пушку.

🤔 Якщо в тебе 5 видів зброї, але всі користуються тільки однією — решта марна.
Значить, треба:
• Зменшити ефективність «оп» варіанту;
• Підсилити інші, дати їм інші плюси;
• Або зробити, щоб ситуації вимагали різного (вороги з бронею, стелс, AoE).

🧪 5. Баланс не існує без тестів
Неможливо збалансувати гру виключно в голові. Тільки коли в неї починають грати інші люди, ти бачиш справжню картину: де гравці ламають механіку, де стає надто важко або навпаки занадто просто, і яку стратегію обирає більшість.

Відео один 👈

👉 Відео два

🎬 Підсумок:
🔹 Баланс — це не інтуїція, а конкретна система чисел
🔹 Працюй з екселем, крива прогресу
🔹 Тести важливіші, ніж твоє «відчуття»

💻 | GAMEDEV UA | #запитання #баланс
6👍4🔥1
Ось реально кайфове відео!

Наткнувся на доволі цікаве відео, як чувачок зробив свій "Unity". Пост не мав би бути рекламним, але вже, якщо почав то скажу 😎

Прекрасна та цікава подача, цікаві теми, а головне - все українською. Якісний розвиток українського геймдеву, це круто 👍

📺 [Переглянути відео] 👈

В основному все сказав, доволі якісно та цікаво. Тому раджу подивитися та підтримати лайком і підпискою.

📲 А ще, якщо вам цікаво, ось його Telegram-канал, де він постить апдейти, технічні штуки і просто ділиться прогресом:

Telegram | Чєпуха
7