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

Зв’язок: @DevAndrew

Анти-скам бот: @IndieSafeBot
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Хай живе піксель: хороший приклад процедурної анімації

✈️ Gamedev | [Джерело] | #натхнення
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥4❤‍🔥2👍1
💭 Гнучкі ефекти з C# Generic Interfaces

У сучасних системах здібностей (abilities) зручніше працювати не з конкретними класами, а з інтерфейсами.

Generic Interfaces (IEffect<TTarget>) дозволяють створювати універсальні ефекти, які можна застосовувати до будь-якого типу об’єктів без дублювання коду.

1️⃣ IEffect. Універсальний ефект

Визначає логіку будь-якого ефекту (шкода, лікування, бафи).

Має Apply, Cancel і подію OnCompleted.

public interface IEffect<T> {
IEffect<T> CreateInstance();
void Apply(T target);
void Cancel();
event Action<IEffect<T>> OnCompleted;
}

🔹 Використання generics гарантує типобезпеку. Наприклад, IEffect<IDamageable> можна застосувати лише до цілей, які реалізують IDamageable.

2️⃣ IDamageable. Будь-який об’єкт, що може отримати шкоду

Це базовий інтерфейс для всіх «пошкоджених» об’єктів.
public interface IDamageable {
void TakeDamage(int amount);
}


Будь-який клас, який реалізує цей інтерфейс, автоматично сумісний з ефектами, не змінюючи їх код.
Так, Enemy реалізує IDamageable, тому може приймати ефекти без додаткової логіки.

3️⃣ Миттєві та довготривалі ефекти

DamageEffect одразу наносить шкоду.
DamageOverTimeEffect працює з таймером і завдає шкоду з інтервалом.
public void Apply(IDamageable t) {
t.TakeDamage(damageAmount);
OnCompleted?.Invoke(this);
}


Таймер автоматично зупиняє ефект і викликає OnCompleted.

4️⃣ Ability. Набір ефектів
[Serializable]
public class Ability {
// Список ефектів, які складають цю здібність.
// [SerializeReference] дозволяє в інспекторі Unity змішувати різні типи ефектів (DamageEffect, DamageOverTimeEffect тощо)
[SerializeReference] public List<IEffect<IDamageable>> effects = new();

// Метод виконання здібності на конкретній цілі
public void Execute(IDamageable t) {
if (t == null) return; // захист від null-цілі

foreach (var e in effects) {
// Створюємо окрему інстанцію ефекту для цього застосування,
// щоб уникнути спільного стану (таймери, currentTarget) між цілями
var instance = e.CreateInstance();
if (instance == null) continue;

// Якщо ціль — Enemy, застосовуємо через ApplyEffect,
// який відслідковує активні ефекти та підписується на OnCompleted
if (t is Enemy enemy)
enemy.ApplyEffect(instance);
else
// Інакше застосовуємо ефект без додаткового трекінгу
instance.Apply(t);
}
}
}


🔹 [SerializeReference] дозволяє змішувати різні типи ефектів прямо в інспекторі. Одна здібність може містити кілька ефектів (наприклад, удар + отрута).

5️⃣ Enemy. Керування ефектами
Enemy зберігає активні ефекти й очищає їх при смерті:
void Die() {
foreach (var e in activeEffects) e.Cancel();
activeEffects.Clear();
}


🔹 Подія OnCompleted прибирає завершені ефекти.
🔹 Cancel() зупиняє активні (DoT) при смерті.

6️⃣ PlayerAbilityCaster. Запуск здібностей
if (Input.GetKeyDown(KeyCode.Alpha1))
Cast(hotbar[0], FindFirstObjectByType<Enemy>());


Викликає здібності з клавіш, додає VFX/SFX і керує виконанням.

(Враховуючи, що цей код лише для прикладу, то [Детальніше тут]) 👈

Якщо говорити про плюси, така система дозволяє легко додавати нові ефекти без зміни основного коду і робить їх повністю повторно використовуваними.

Вона також забезпечує чітку архітектуру, що значно спрощує підтримку та масштабування ігрової механіки.

✈️ Gamedev | #уроки #CSharp #GenericInterfaces
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤‍🔥21🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
👀 Зроби рух свого персонажа в 10 разів плавнішим з Root Motion!

✈️ Gamedev | #туторіал #unity #animation #RootMotion #рух
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍4❤‍🔥32
📱 Шейдер-гуру покидає Unity?

Бачили ці круті відео про шейдери? Багато з них створював Бен Кловард – один із провідних Technical Artist із понад 20-річним досвідом.

Він співтворець ShaderFX та автор Uber Shader для Maya, останні роки активно працював над Unity Shader Graph і вів популярний YouTube-канал із 75 000 підписників.

🧩 2025 рік виявився складним для технологічної та геймінг-індустрії. Microsoft, EA, PLAION, Virtuos та King проводили скорочення персоналу, і Бен потрапив під одну з хвиль.

Що цікаво: він хоче продовжити щотижневі навчальні відео на YouTube.

А якщо ваша команда шукає досвідченого Technical Artist із глибокими знаннями шейдерів і оптимізації рендерингу – пишіть Бену
😉

✈️ Gamedev | #новини #Unity #скорочення
Please open Telegram to view this post
VIEW IN TELEGRAM
😢18🔥3👀2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔈 Bro Audio. Просунути система керування звуком

Вона дозволяє дизайнерам працювати зі звуками без коду, а програмістам через простий API.

Має фічі для плавного затухання, рандомізації, безшовних лупів і динамічних ефектів 🫠

✈️ Gamedev | [Завантажити] | #інструменти #аудіо #audio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥192👍2❤‍🔥1
Всім привіт 👋

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

Ну що, хто покаже перший скрін?🔥

✈️ Gamedev | #ScreenshotSaturday
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍2🥰1💯1
📌 Підсумок публікацій за тиждень:

Як завжди підсумок у одному пості! Зберігайте 😁

🎓 Навчальні матеріали:
👀 Зроби рух свого персонажа в 10 разів плавнішим з Root Motion!
💭 Гнучкі ефекти з C# Generic Interfaces

📰 Новини та цікаві теми:
📱 Шейдер-гуру покидає Unity?
🔥 Хай живе піксель: хороший приклад процедурної анімації
🌎 Масштабний збій AWS паралізував сервіси по всьому світу

🔨Корисне:
🔈 Bro Audio. Просунути система керування звуком
☕️ Як пофіксити помилку в інспекторі!

Не забуваємо, що у першому закріпленому повідомленні є вся потрібна інформація. Що # тут не просто так!

Та також, переглядайте та діліться своїми результатами у SCREENSHOT SATURDAY!

✈️ Gamedev | [Підтримати канал тут]
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥134🔥3👎2
🔄 Retention у відеоіграх: що це, які норми і як його підвищити

Якщо для вас це незнайоме слово тоді варто запам'ятати: Retention — це одна з ключових метрик виживання гри.

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

Зазвичай дивляться такі показники:

• Day 1 Retention (R1): скільки гравців повертаються наступного дня після встановлення.

Day 7 Retention (R7): скільки залишаються через тиждень.

• Day 30 Retention (R30): скільки залишаються через місяць.

Формула проста:
Retention = (Кількість гравців, що повернулись / Кількість установок у день 0) × 100%


📊 А як що до середніх показників? [Джерело]

На диво, якщо говорити про основні платформи, то різниця відрізняється кардинально.

🔹 Мобільні ігри:

D1: ~35–40%

D7: ~10–15%

D30: ~5–10%

🔸ПК / Консолі:

D1: ~50-60%

D7: ~20-30%

D30: ~10-20%

«Хороший профіль» утримання часто позначають як 40 / 20 / 10 — це ціль, до якої прагнуть більшість студій. Проте ці бенчмарки залежать від жанру, платформи як вже сказано та від регіону.

Для прикладу гіперказуальні ігри (hyper-casual) мають швидке «скасування» тоді як з іншими жанрами ситуація в перспективі набагато краща. Також регіон, Північна Америка показує одні з найкращих показників. Серед країн виділяється і Японія, цілих D30: ~6.4% проти ~3.7% у США. [Інфа]

🤑 Вплив Retention на LTV та монетизацію.

Тут і говорити багато не потрібно, бо відповідно чим більша залученість та % утримання аудиторії - тим більший дохід. Як зазначають фахівці:

«...високий рівень утримання збільшує LTV гравця, адже він довше взаємодіє з продуктом»


Як покращити Retention?

Найняти хорошого гейм-дизайнера. А якщо трішки роз'яснити, то зробити так, щоб перший вхід гравця в гру шокував його. У хорошому сенсі 😉

Далі можна було би довго і довго говорити про систему винагород, щоденні бонуси, квести, Push-повідомлення та нагадування (що до речі є хорошою ідеєю), але якщо ідея хороша не менш важливим за ці всі пункти є контент: регулярні оновлення, святкові івенти і т.п.

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

📌 Тому, якщо хочете заробити потрібно працювати :(

✈️ Gamedev | #запитання #retention #LTV #аналітика #геймдизайн
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12🔥2💯1
Media is too big
VIEW IN TELEGRAM
😵‍💫 Surface-Stable Fractal Dithering

Метод діджерингу від Rune Skovbo Johansen, який дозволяє точкам "липнути" до 3D-поверхонь, зберігаючи стабільний розмір і відстань на екрані навіть при зміні відстані.

✈️ Gamedev | [Джерело] | #корисне #Shader #Surface #шейдер #натхнення
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤‍🔥3👍1
Трішки сумної статистики 😞

У 2025 році в Steam вийшло майже 13 тисяч нових ігор, але майже 40% з них не заробили навіть 100$, що є сумою, яка дорівнює вартості публікації гри в магазині.

Згідно аналітики Gamalytic майже дві третини заробили <1000$ і лише 8% зібрали > $100 тис. Ситуація на ринку інді-ігор наступна: 30% найменш прибуткових проєктів заробили в середньому лише $37.

У відкритій частині бази йдеться, що 47,4% продали менше ніж 100 копій, а ще 28% від 100 до 1000.

⚠️ Gamalytic зазначає, що їхні дані неповні, тож цифри можуть коливатись. Багато ігор з малою аудиторією не змогли заробити навіть мінімальні суми.

Серед них є безплатні експерименти та фан-проєкти, але загалом статистика показує масштаб “гри в нікуди”: більшість релізів виходять не заради прибутку.

Навіть зі ШІ, що здешевлює розробку, час, гроші та зусилля часто не окупаються.

А ви б ризикнули випустити гру в такому насиченому ринку?

✈️ Gamedev | #новини #steam #publish #ІндіРинок
Please open Telegram to view this post
VIEW IN TELEGRAM
😢9🔥4👀2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
😶‍🌫️ Фейковий туман за хвилину!

✈️ Gamedev | #туторіал #туман
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥23🔥42😍1
This media is not supported in your browser
VIEW IN TELEGRAM
🎯 Drag & Launch у Unity 2D: Повний гайд з кодом та механікою

Хочеш реалізувати у грі механіку “потягни й кинь”, як у Angry Birds? Давай розберемо готовий приклад.

TrajectoryAimer2D: Симулює траєкторію об’єкта з урахуванням гравітації, відскоків і тертя. Відображає її точками, щоб гравець бачив, куди полетить об’єкт перед запуском.

DragController: Керує об’єктом, відстежує натискання, драг і відпускання, і розраховує силу запуску. Викликає TrajectoryAimer для показу траєкторії та застосовує імпульс при відпусканні.

🧑‍💻 Код (C#):

1. DragController відповідає за те, щоб гравець міг тягнути об’єкт і запускати його.

1️⃣ Відстеження натискання миші
if (Input.GetMouseButtonDown(0) && !isDragging)
{
DragStart();
}


Input.GetMouseButtonDown(0) перевіряє, чи натиснута ліва кнопка миші. !isDragging гарантує, що драг не почнеться, якщо об’єкт вже тягнуть.

Якщо обидві умови істинні, викликається метод DragStart(). У якому ми скидаємо швидкість та обертання об'єкта.

2️⃣ Drag() – процес драгування

Метод Drag() викликається кожного кадру в Update(), поки гравець тримає об’єкт мишею:

Беремо поточну позицію миші у світі та обчислюємо відстань від початку драгування. Це визначає напрямок і силу. Далі обмежуємо максимальну відстань запуску, щоб гравець не тягнув об’єкт занадто далеко.

Vector2 currentPos = MousePosition;
Vector2 distance = dragStartPos - currentPos;

if (distance.magnitude > dragLimit)
distance = distance.normalized * dragLimit;


Розраховуємо сила запуску, яка буде застосована при відпусканні. Чим далі тягнемо – тим сильніше буде кидок. Та виходячи з даних об'єкта визначаємо очікувану траєкторію.

Vector2 initialVelocity = (Vector2)(finalForce / rb.mass);

trajectoryAimer.ShowTrajectory(rb.position, initialVelocity);


3️⃣ DragEnd() – завершення тягнення

Метод DragEnd() викликається, коли гравець відпускає мишу після драгування.

isDragging = false;


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

rb.AddForce(finalForce, ForceMode2D.Impulse);


2. TrajectoryAimer2D відповідає за показ траєкторії польоту враховуючи масу, швидкість і інші вхідні дані.

На початку скрипта ми задаємо всі параметри для симуляції та візуалізації: кількість кроків (maxSteps), тривалість одного кроку (timeStep), шари для перевірки колізій (collisionMask), фізичні властивості (friction, bounciness, gravityScale).

1️⃣ ShowTrajectory() – розрахунок і відображення траєкторії

Метод викликається з DragController кожного кадру під час драгування і обчислює майбутні позиції об’єкта, враховуючи гравітацію, швидкість, відскоки та тертя.

Vector2 position = origin;           // Початкова позиція об’єкта
Vector2 velocity = initialVelocity; // Початкова швидкість
float gravity = Physics2D.gravity.y * gravityScale; // Врахування гравітації

List<Vector2> points = new List<Vector2>(); // Список точок для візуалізації


Далі проганяємося циклом, щоб прогнозувати нову позицію на кожному кроці і перевіряємо, чи буде зіткнення з колайдером.
for (int i = 0; i < maxSteps; i++)
{
velocity += new Vector2(0, gravity) * timeStep; // Додаємо гравітацію
Vector2 nextPosition = position + velocity * timeStep; // Наступна позиція


2️⃣ Візуалізація траєкторії – SpawnDot()

Після того як ми розрахували всі точки траєкторії, метод SpawnDot() створює маленькі об’єкти (крапки) у кожній позиції зі списку, щоб гравець бачив, куди полетить об’єкт.

Тут ми також налаштовуємо прозорість крапок, щоб вони плавно зменшувалися до кінця траєкторії, роблячи її більш наочною та зрозумілою.

📌 Повна версія коду з коментарями тут [Клац] 👈

✈️ Gamedev | #уроки #DragAndLaunch #туторіал
Please open Telegram to view this post
VIEW IN TELEGRAM
7❤‍🔥4👍3🔥3
📱 Game Jam на честь двадцятиріччя!

Unity виповнюється два десятиліття . На честь цього компанія запускає 48-годинний Unity Game Jam, який стартує 7 листопада о 19:00 за київським часом.

Учасники від соло-розробників до великих команд змагатимуться, створюючи ігри, натхненні історією рушія.

🏆 Категорії оцінювання:
• Fun Factor
• Art
• Sound Design
• Uniqueness/Creativity
• Narrative Design


А ще буде спеціальна номінація “Most Creative Use of Anniversary Assets”, переможців якої покажуть у прямому ефірі Unity Livestream.

Ну що? Хто прийме участь? 😉

✈️ Gamedev | [Джерело] | #новини #річниця #Unity #GameJam
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥14🔥3🎉21👍1
⚙️ Оптимізація інтерфейсу

Так, нажаль це теж потрібно оптимізовувати. Але не переживайте, буквально декілька простих порад 😅

Розділіть Canvas — не оновлюйте весь інтерфейс через одну дрібну зміну.

Використовуйте Tween замість Animator — менше навантаження, плавніші анімації і так далі...

✈️ Gamedev | [Джерело] | #оптимізація #Unity #Canvas #UI #Interface #інтерфейс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥114🔥1
Всім привіт 👋

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

Ну що, хто покаже перший скрін?🔥

✈️ Gamedev | #ScreenshotSaturday
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8🔥3🎉1
📌 Підсумок публікацій за тиждень:

Ще один тиждень пролетів. І ось підсумок!😁

🎓 Навчальні матеріали:
😶‍🌫️ Фейковий туман за хвилину!
🎯 Drag & Launch у Unity 2D: Повний гайд з кодом та механікою

📰 Новини та цікаві теми:
🔄 Retention у відеоіграх: що це, які норми і як його підвищити
Трішки сумної статистики 😞
📱 Game Jam на честь двадцятиріччя!

🔨Корисне:
😵‍💫 Surface-Stable Fractal Dithering
⚙️ Оптимізація інтерфейсу

Не забуваємо, що у першому закріпленому повідомленні є вся потрібна інформація. Що # тут не просто так!

Та також, переглядайте та діліться своїми результатами у SCREENSHOT SATURDAY!

✈️ Gamedev | [Підтримати канал тут]
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12😁3🔥2👍1
🧠 Unity Dev Tip: що таке OnValidate() і навіщо воно взагалі потрібне?

Нещодавно стикнувся з ситуацією: у мене був список елементів і кожен новий елемент потрібно було називати автоматично у форматі mob_1, mob_2, mob_3

Робити це вручну — довго і лінь, особливо, якщо таких елементів багато. Робити це в Start() або Awake() запізно, бо значення потрібні ще до запуску гри.

І тут згадую про одну класну річ — OnValidate()

🔍 То що таке OnValidate()?

OnValidate() — це editor-only метод у MonoBehaviour, який автоматично викликається в редакторі, коли скрипт завантажується або значення змінюється в Inspector. БЕЗ ЗАПУСКУ ГРИ!!!

Для прикладу:
public class EnemyList : MonoBehaviour
{
// 📝 Список імен ворогів, які ми будемо автозаповнювати
[SerializeField] private List<string> enemyNames = new List<string>();

#if UNITY_EDITOR // Гарантуємо, що код не потрапить у билд гри
private void OnValidate()
{
// 🔄 Проходимось по всьому списку щоразу, коли змінюється щось у інспекторі
for (int i = 0; i < enemyNames.Count; i++)
{
// ❗️ Якщо елемент порожній або null — автоматично генеруємо ім'я
if (string.IsNullOrEmpty(enemyNames[i]))
enemyNames[i] = $"mob_{i + 1}"; // 👉 mob_1, mob_2, mob_3 ...
}
}
#endif
}

Тепер:
➜ Додаються нові елементи у списку
➜ Самоприсвоєння mob_4, mob_5, mob_6
➜ без натискання Play, без ручної роботи

⚠️ Важливе зауваження

OnValidate() НЕ має працювати з runtime-логікою, збереженнями, фізикою тощо.
Його задача підготувати дані ДО старту гри.

Це рішення не єдине можливе, але мені воно допомогло доволі швидко 😅

✈️ Gamedev | #уроки #OnValidate #UnityTips #UnityEditor #ініціалізація #редактор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤‍🔥32
⚙️ 40 безкоштовних асетів, які зроблять редактор у рази зручнішим!

Інструменти для ієрархії, інспектора, дебагу, камер, організації проєкту, UI кастомізації, оптимізації та в основному для прискорення роботи!

✈️ Gamedev | [Джерело] |#інструменти #assets #UnityEditor
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7👍2🔥2
📱 Ігри без коду і рушія?

Трохи перебільшення, але майже правда 😅

Unity запустила Unity Studio. Без Unity Hub, без інсталяцій, без public void Start(). Відкрив сайт і вже будуєш сцену.

Що це таке?

Unity Studio — це легкий онлайн-редактор, де все працює через drag-and-drop (scratch?) і візуальні блоки логіки.

Ідея проста: можна зібрати демо, walkthrough, тренувальну сцену, конфігуратор чи прототип без програмування і складного пайплайну.

Unity позиціонує його як інструмент для дизайнерів, маркетингових команд, освітніх проєктів і тих, кому "потрібен інтерактив, але не повний рушій".

Зараз це бета, і компанія відкрила реєстрацію для всіх, хто хоче залетіти першим і вплинути на розробку.

Це реально майбутнє no-code розробки чи просто "Figma для 3D"? 👀

✈️ Gamedev | [Реєстрація] | #новини #Unity #UnityBeta #NoCode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤔4👍2🤯21
This media is not supported in your browser
VIEW IN TELEGRAM
🎢 Створюйте плавні криві та шляхи легко!

Пакет Splines дозволяє малювати, анімувати та розташовувати об’єкти вздовж шляхів для руху, оточення та іншого.

✈️ Gamedev | [Джерело] | #туторіал #spline #криві #Curves
Please open Telegram to view this post
VIEW IN TELEGRAM
14❤‍🔥41🔥1
Media is too big
VIEW IN TELEGRAM
🔥 Paper Burn Effect

Дуже крутий та стильний ефект згоряння паперу. Може стати ідеальним доповненням для меню, переходів, кат-сцен чи будь-якої VFX фішки в грі.

Десь я таке бачив в Dead By Daylight 🧐

✈️ Gamedev | [Джерело] | [Стаття] | #корисне #Shader #Burn #BurnEffect #шейдер
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤‍🔥41👍1