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

Зв’язок: @DevAndrew

Анти-скам бот: @IndieSafeBot
Download Telegram
📦 Pribambase / Пряме малювання в Blender через Aseprite

Якщо ти працюєш з low-poly 3D або 2.5D спрайтами, і любиш Aseprite разом із Blender , то цей плагін дозволяє малювати текстури прямо в Aseprite і бачити результат одразу в Blender.

⚡️ Що можна робити з Pribambase:

Малюєш у Aseprite і бачиш зміни в Blender одразу, без збереження чи експорту.
Показує UV-мапу прямо в Aseprite, оновлюється при зміні моделі.
Керує спрайт-анімаціями: кадри, теги, цикли, NLA.
Швидкі шорткати для сіток, піксельних матеріалів і 2D спрайтів.
Підтримка 2.5D спрайтшитів та анімацій для Armory Engine.

🛠 Як встановити:
1. Blender: Edit → Preferences → Add-ons → Install → обираєш pribambase-blender-{…} → активуєш.
2. Aseprite: перетягуєш розширення у вікно або відкриваєш файл.

🔹 [GitHub] - Клац
🔹 [illusionofmana] - Клац

💡 Фішка: Pribambase дає швидкий і зручний 2.5D піксельний робочий процес, економить купу часу та рутинної роботи.

💻 | GAMEDEV UA | #інструменти #aseprite #blender #піксельарт
🔥7👍21
This media is not supported in your browser
VIEW IN TELEGRAM
🎥 Створюємо камеру від третьої особи за допомогою Cinemachine!

Хочеш, щоб твоя гра виглядала професійно? 😎

У цьому туторіалі показано, як налаштувати Third Person Camera із Aiming Rig у Cinemachine, а також використати Impulse Propagation та Blending, щоб додати геймплейні фішки для контролера камери.

📌 Дивись відео та завантажуй готовий проєкт

💡 Підійде всім, хто працює з Unity та хоче прокачати візуал і керування камерою у своїх іграх!

💻 | GAMEDEV UA | #туторіал #Cinemachine #ThirdPersonCamera #камера
7👍1🔥1
🚀 Чому не варто створювати нові об’єкти всередині Update()

У Unity є ще один “тихий вбивця FPS” - це непомітні алокації пам’яті всередині гарячих циклів.
Здається, дрібниця: ну що такого? Але на мобільних, VR чи WebGL ці мікроалокації швидко перетворюються на лаги.

📌 Що таке алокація

Алокація (allocation) — це процес виділення пам’яті для нових даних під час виконання програми.
У C#/Unity зазвичай є:
Stack allocation — швидке виділення у стеку (для простих значень).
Heap allocation — повільніше виділення в “купі”, з подальшим прибиранням за допомогою Garbage Collector (GC).

Кожен new усередині Update() зазвичай означає heap-алокацію, а купа таких викликів змушує GC працювати частіше → гра може фризити.

🧠 Типовий приклад
void Update()
{
// Кожного кадру створюється новий масив
float[] values = new float[3] { Mathf.Sin(Time.time), 0f, Mathf.Cos(Time.time) };

// Або новий об’єкт класу
var particle = new Particle();
}


Код виглядає чисто, але кожен new тут → алокація → робота для GC.

Як оптимізувати

1. Кешуй об’єкти
Створюй їх один раз у Awake / Start, або як поля класу:
private float[] _cachedValues = new float[3];

void Update()
{
_cachedValues[0] = Mathf.Sin(Time.time);
_cachedValues[1] = 0f;
_cachedValues[2] = Mathf.Cos(Time.time);
}


2. Використовуй статичні або readonly поля для констант
Не створюй їх наново кожен кадр:
private static readonly GameObject Prefab = Resources.Load<GameObject>("MyPrefab");


3. Профілюй код
Unity Profiler та Memory Profile швидко показують, де саме відбуваються зайві алокації.

💡 Коли можна не паритися

Якщо створюєш об’єкти лише раз на кілька секунд або в подіях (OnClick, OnEnable) - сміливо юзай new. Або у малих проєктах чи прототипах оптимізація не завжди потрібна. Спершу перевір профайлером, а потім оптимізуй.

💻 | GAMEDEV UA | #оптимізація #csharp #Unity #coding
👍5🔥1
🎯 Що таке Singleton у Unity (C#)

Singleton — це патерн проєктування, який дозволяє створити в грі лише один екземпляр певного класу й зробити його доступним з будь-якої частини коду. У Unity його часто використовують для таких речей, як GameManager, AudioManager чи UIManager, усюди, де потрібен єдиний “контролер”, що зберігає спільний стан або керує процесами.

Наприклад, GameManager може зберігати прогрес гри, рахунок чи налаштування, а AudioManager керує музикою та звуковими ефектами. Завдяки Singleton не потрібно передавати об’єкт між різними скриптами, бо його можна легко викликати через Instance.

⚠️ Мінуси:
Надмірне використання робить код “жорстко зв’язаним”
Складніше тестувати
Можуть з’являтися дублікати, якщо неправильно реалізувати


📌 Базовий приклад:
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }

void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}

Instance = this;
DontDestroyOnLoad(gameObject);
}
}

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

💻 | GAMEDEV UA | #уроки #Singleton #GameManager #екземпляр
🔥8
🚀 Unity 6.3 доступна! [Детальніше тут]

Ще не відійшли від 6.2, а тут ще одне оновлення. Спробуйте нову Unity 6.3 з покращеною стабільністю, продуктивністю та підтримкою платформ.

🔹 Головні новинки:

• UI Toolkit: налаштовувані шейдери та SVG.
Render 3D як 2D з підтримкою сортування та освітлення.
Shader Graph: нові інструменти для шейдерів та террейнів.
Render Graph: швидше і гнучкіше, переглядач на пристрої.
Multiplayer: HTTP/2 та міграція хоста.
• Аудіо: Scriptable Audio Pipeline та Enhanced Audio Foundation.
Профілювання та оптимізація: покращені Lightmaps, 2D Animation та Sprite Atlas Analyzer.

💡 Бета відкрита для всіх через Unity Hub!

Не забудь зробити резервну копію проекту 😉

💻 | GAMEDEV UA | #новини #Unity #unitynews
🔥7👍2💯1
💡 Скільки гра має бути в Early Access, щоб не втратити гравців?

Аналітики Newzoo у своєму «Глобальному звіті про ігровий ринок 2025» поділилися статистикою про дочасний доступ у Steam.

🔍 Вони дослідили, як термін раннього доступу впливає на кількість гравців після релізу версії 1.0.

📌 Головний висновок: оптимальний період до 6 місяців.


Найкращі результати отримали ігри, що перебували в ранньому доступі 4–6 місяців? у середньому ~1,8 млн користувачів за перші 3 місяці після релізу.

📉 Чим довше гра залишається в EA, тим важче повернути аудиторію на виході.

💻 | GAMEDEV UA | #запитання #ринок #earlyaccess #доступ #раннійдоступ
👍6🔥21
🕹 1-Bit Platformer Pack

Понад 400 1-бітних спрайтів: персонажі, вороги, предмети, блоки та тайли.

🔗 [Завантажити тут] 👈

Ліцензія: CC0 – можна використовувати у будь-яких проектах, навіть комерційних, атрибуція не обов’язкова.

💻 | GAMEDEV UA | #корисне #текстурки #1bit #піксельарт
1👍103
💨 Сила тертя і гальмування

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

v(t) = v₀ ⋅ e^(−μt)

v(t) — швидкість через час t
v₀ — початкова швидкість
• μ — коефіцієнт тертя (чим більше, тим швидше об’єкт зупиняється)

💡 Інтуїтивно: при великому терті об’єкт зупиняється швидко, при малому довго ковзає.

Для чого це потрібне в іграх?

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

Як реалізувати в Unity

Рух об’єкта оновлюється по кадрах, тому формулу дискретизують:

v_new = v_old ⋅ e^(−μ Δt), де Δt = Time.deltaTime


Приклад коду:
using UnityEngine;

public class FrictionExample : MonoBehaviour
{
[SerializeField] private float speed = 5f; // початкова швидкість
[SerializeField] private float friction = 1f; // коефіцієнт тертя

private Vector3 velocity;

void Start()
{
velocity = transform.forward * speed; // рух уперед
}

void Update()
{
// Експоненційне гальмування
velocity *= Mathf.Exp(-friction * Time.deltaTime);

// Рух об'єкта
transform.position += velocity * Time.deltaTime;

// Зупинка, коли швидкість дуже мала
if (velocity.magnitude < 0.01f)
velocity = Vector3.zero;
}
}


Пояснення коду:


Mathf.Exp(-friction * Time.deltaTime) точно реалізує експоненційне зменшення швидкості.
friction контролює, наскільки швидко об’єкт зупиняється.
• Маленькі швидкості можна обнуляти, щоб уникнути дрібних "дрейфів".

‼️ Але виникає інше запитання. Як визначити friction?

Є декілька методів. Самий простий - "експерименталний". Просто підібрати вручну, поки не буде виглядати природньо.

Ще один варіант - за формолую. У класичній фізиці: сила тертя F = μ * N

μ — коефіцієнт тертя (в реальному житті: 0…1 для більшості поверхонь)
N — нормальна сила (вага об’єкта)

💡Хоча краще всього робити по відчуттям. Але якщо ви екстремал, який хоче, щоб все було точно то ваш вибір 😉

📦 Готовий варіант у Unity без коду

Якщо ви не хочете писати код вручну, можна використати Rigidbody (3D) або Rigidbody2D і задати Drag (Linear Drag). Unity автоматично буде зменшувати швидкість об’єкта:

Rigidbody.drag або Rigidbody2D.drag — відповідає за “тертя повітря/середовища”
Простий спосіб отримати плавне гальмування, без написання власних формул.

📌 Цей варіант зручний, якщо потрібен швидкий результат і взаємодія з фізикою Unity.

💻 | GAMEDEV UA | #математика #тертя #рух #силатертя
🔥7
🔨Як Маріо став Маріо

Маріо вперше з'явився як персонаж на ім'я Jumpman у грі Donkey Kong, яка вийшла 9 липня 1981 року, де він був теслею, що рятував свою дівчину від горили.

Пізніше, у 1983 році, в грі Mario Bros. він став сантехніком, а своє ім'я "Маріо" отримав на честь Маріо Сегале, власника складу американського офісу Nintendo.

💻 | GAMEDEV UA |
#факти #game #gamedev #маріо #mario
🔥95👍2
Фінальний мем тижня!

Зв'язок з автором: @DevAndrew 👈

Бот з блек-лістом: @IndieSafeBot

📌 І пам'ятаємо про #теги, що вони тут не просто так (детальніше в самому першому закріпі)

✈️ Gamedev | #меми
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👍2
😅 Unity знову сипле новинами! [Детальніше]

Щойно ми встигли ознайомитися з Unity 6.2, уже тестується 6.3, а тим часом команда підготувала перший список breaking changes для Unity 6.4.

Що планують змінити 👇

🔹 UI Toolkit:
UxmlFactory/UxmlTraits остаточно йдуть у минуле. Нові елементи треба створювати через [UxmlElement] та [UxmlAttribute].

🔹 SRP Volumes:
Тепер Physics не обов’язкова залежність для SRP Core, URP і HDRP. Зміни торкнуться Local Volumes, а інтерфейс IVolume прибрали — використовуйте VolumeGizmoDrawer.

🔹 OnDisable для всієї ієрархії:
Object.Destroy() тепер викликає OnDisable() навіть для «внуків» об’єкта, а не лише для нього й прямих дітей.

🔹 SRP Compatibility Mode:
Його вирішили прибрати назавжди. Кастомні рендер-паси доведеться переводити на Render Graph.

👉 Це ще не весь список, бо Unity обіцяє оновлювати його до старту бети 6.4. Будемо слідкувати 🫡

💻 Gamedev | #новини #Unity #Gamedev #Unitynews
7🤔3
This media is not supported in your browser
VIEW IN TELEGRAM
Як відключити колізії гравця зі своїми кулями 💥

💻 Gamedev | #туторіал #collider #зіткнення
6🔥3👍2
📊 Відгуки і рейтинги = продажі ігор

Дані за 2024–2025 роки показують: чим вищий рейтинг та більше позитивних відгуків – тим вищі продажі ігор на всіх платформах (А буває інакше?)

🔹Steam [Джерело]

На Steam кількість і зміст відгуків прямо впливають на конверсії та видимість. За даними GameDiscoverCo з травня 2024 року, середні ігри з високим рейтингом суттєво краще конвертують свій лист очікування у фактичні продаж

Ігри з рейтингом «Overwhelmingly Positive» (> 95%) продаються в рази краще: зі 100 тис. вішлістів виходить близько 51 тис. продажів. Натомість «змішані» (< 70%) відгуки різко знижують конверсію, тоді як «Mostly Positive» і вище дають сигнал гравцям, що гра безпечна для покупки.

🔹Google Play (Android) [Джерело]

На Google Play рейтинг напряму впливає на рішення: близько 79% користувачів перевіряють його перед завантаженням, а 77% узагалі не встановлюють ігор із оцінкою нижче трьох зірок. Високі ж рейтинги значно підвищують довіру і конверсію.

А як щодо алгоритмів? Алгоритм Google Play враховує рейтинги й відгуки поряд з іншими сигналами, тож високий середній бал (особливо 4.5–5★) покращує позиції в пошуку та підвищує конверсію. Одночасно Google відсіює спам і фейкові коментарі, тому розробники мають просити оцінки лише «етично» — через вбудовані запити, без винагород.

🔹App Store (iOS)

В App Store ситуація подібна до Google Play: більшість користувачів орієнтуються на відгуки й рейтинг, і оцінка нижче 4★ різко знижує шанси на встановлення.

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

📌 І підсумовувати не потрібно, бо і так всім зрозуміло, що відгуки/рейтинг = продаж. А ось алгоритми вже цікавіше 🧐

💻 Gamedev | #запитання #статистика #маркетинг #оцінка #рейтинг
4👍2🔥1
🌀 State Machine: що це і як працює

State Machine – це шаблон проектування, який описує поведінку об’єкта через набір станів та переходів між ними.

Простіше кажучи, у будь-який момент об’єкт перебуває лише в одному стані, а події чи умови визначають перехід в інший стан (Аніматор? 😅)

Навіщо потрібна FSM у геймдеві

Без FSM доводиться писати безліч if-else та тримати купу булевих прапорців. Результат? Код стає заплутаним і важко підтримуваним. FSM дозволяє:
Чітко розділити логіку по станах.
Легко додавати нові стани та переходи.
Зменшити дублювання коду.
Робити поведінку персонажів і систем прозорою.

🔹 Де використовується?

1. AI ворогів та NPC: стани «патрулювання», «переслідування», «атака». Перехід між ними відбувається за подіями (наприклад, гравець з’явився в полі зору).

2. Ігрова логіка (Game State): меню, гра, пауза, завершення рівня. Перехід відбувається за подіями (кнопки, завершення рівня).

3. Анімації: Animator Controller – це стейт-машина для анімацій. Через StateMachineBehaviour можна запускати код при вході/виході з анімаційного стану.

4. UI: перемикання між меню, налаштуваннями, екраном гри. Кожен стан відповідає певному екрану або панелі.

🔹 Приклад базової FSM у Unity (C#)
using UnityEngine;

// Базовий клас стану як ScriptableObject
public abstract class State : ScriptableObject
{
public virtual void Enter(GameObject owner) { }
public virtual void Update(GameObject owner) { }
public virtual void Exit(GameObject owner) { }
}

// Приклад стану: Idle
[CreateAssetMenu(menuName = "FSM/States/IdleState")]
public class IdleState : State
{
public override void Enter(GameObject owner) => Debug.Log("Idle: Enter");

public override void Update(GameObject owner)
{
// Тут можна перевіряти умови переходу
// Наприклад, якщо бачимо гравця — переходь в Patrol
var fsm = owner.GetComponent<StateMachine>();
if (fsm.SeePlayer())
{
fsm.ChangeState(fsm.patrolState);
}
}

public override void Exit(GameObject owner) => Debug.Log("Idle: Exit");
}

// Приклад стану: Patrol
[CreateAssetMenu(menuName = "FSM/States/PatrolState")]
public class PatrolState : State
{
public override void Enter(GameObject owner) => Debug.Log("Patrol: Enter");

public override void Update(GameObject owner)
{
// Логіка патрулювання
}

public override void Exit(GameObject owner) => Debug.Log("Patrol: Exit");
}

// Контролер FSM
public class StateMachine : MonoBehaviour
{
[Header("States (ScriptableObjects)")]
public State initialState;
public State patrolState; // задаємо через інспектор

private State currentState;

void Start()
{
if (initialState != null)
{
currentState = initialState;
currentState.Enter(gameObject);
}
}

void Update()
{
// Виклик логіки стану
currentState?.Update(gameObject);
}

void FixedUpdate()
{
// Якщо стан пов'язаний з фізикою, тут можна викликати додаткові методи
// Наприклад: currentState?.FixedUpdate(gameObject);
}

public void ChangeState(State newState)
{
currentState?.Exit(gameObject);
currentState = newState;
currentState?.Enter(gameObject);
}

// Приклад умови переходу
public bool SeePlayer()
{
// Тут простий приклад перевірки
}
}
//ScriptableObject станів не зберігає локальні дані для конкретного об'єкта

Кожен стан має методи Enter, Update, Exit. Контролер викликає їх у міру зміни стану.

📌 Best Practices

Щоб FSM працювала ефективно і сучасно, рекомендується розділяти дані та поведінку, наприклад, використовувати ScriptableObject для опису станів і переходів.

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

💻 Gamedev | #уроки #Unity #csharp #State #StateMachine #FSM
🔥62❤‍🔥11🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🧩 SpriteShape. Що це таке?

Це інструмент, який дозволяє малювати дороги, річки, гори чи будь-які криві форми не вручну, а буквально «натягувати» спрайти на лінію.

Ти ставиш точки, а Unity сама будує форму з кутів і прямих сегментів.

🔹 Як працює?
1.
Додаєш SpriteShape Profile — набір спрайтів для різних частин:
Corner (кути),
Edge (прямі частини).
2. У сцені створюєш SpriteShape Controller і малюєш криву.
3. Unity сам "натягує" спрайти по цій кривій, комбінуючи кути й прямі сегменти.

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

💻 Gamedev | #інструменти #SpriteShape #туторіал #leveldesign
👍11🔥2🥰1
🚨 У Steam верифікована гра вкрала $150 000 у геймерів

Майже два місяці на платформі Steam продавалась безплатна гра Block Blasters — ретро-платформер із сотнями позитивних відгуків. Насправді у коді був троян, який викрадав криптовалюту з гаманців гравців.

❗️ Жертвами стали сотні користувачів. Серед них стрімер із Латвії RastalandTV, який під час благодійного стріму втратив $32 000, зібрані на лікування від саркоми.


Дослідники з’ясували, що шкідливе ПЗ крало дані входу в Steam, IP-адреси та доступ до криптогаманців. Загалом втрати склали понад $150 000.

🔒 Якщо ви встановлювали Block Blasters то терміново:
змініть паролі Steam;
перенесіть криптовалюту на нові гаманці.

Valve поки офіційно не прокоментувала інцидент.

💻 Gamedev | #новини #valve #Steam #криптовалюта #шахрайство
🤯10👀3❤‍🔥11👍1
Retro synth - 80/90's / Три безкоштовних трека 💿

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

Особисто мені подобається такий стиль. А що ви думаєте 👇

💻 Gamedev | #корисне #аудіо #retrowave #synthwave #audio
👍6🔥2🥰2
🎯 Чи працює реклама через інфлюенсерів для інді-ігор?

Так! І часто навіть ефективніше, ніж класична реклама.

Наприклад, у кейсі Kickstarter-кампанії інді-гри Infinity Heroes маркетинг через інфлюенсерів забезпечив 245% повернення інвестицій [Джерело]

📊 ROI (Return on Investment — окупність інвестицій) у рекламі через інфлюенсерів може бути значно вищим: у середньому бренди отримують у кілька разів більшу віддачу, ніж від банерів чи звичайних оголошень. Для інді-ігор це особливо важливо, бо бюджети обмежені.

Навіть невеликі канали з аудиторією у 10–100 тисяч підписників (хіба це невеликі?) часто показують кращу залученість, ніж великі «зірки».

Загалом 70% брендів визнають, що найвищий ROI вони отримують від співпраці з творцями контенту [Джерело]

🔥 Де це працює найкраще:

Twitch — прямий контакт із геймерською аудиторією.
YouTube Gaming — довготривалі відео, які продовжують приносити гравців навіть через місяці.
TikTok — всі ж бачили відео з історіями з reddit-а, а на фоні була якась гра?

‼️АЛЕ...
Якщо говорити про небезпеки, то дуже багато «інфлюенсерів» мають накручену аудиторію, тому виходить ви платите за цифри.

Наприклад, у 2019 році бренди втратили близько $1,3 млрд через фейкові підписки [Джерело]

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

💻 Gamedev | #запитання #реклама #інфлюенсери #marketing #маркетинг
7👍2🔥21
💾 Коротке нагадування що до Texture Compression

Хоча зараз не 90-ті, коли для одного грибочка в Mario доводилося відзеркалювати ту саму текстуру, аби зекономити пам’ять, все ж не забуваємо про стиснення текстур 🍄

🔹Max Size — завжди підбирайте під реальну потребу. Іконці не треба 4K, 256×256 вистачить.
🔹Compression (Low / Normal / High) — впливає лише на вигляд текстури, а не на пам’ять. Low = швидше компресія, High = краще виглядає.

Не забувайте про Filter Mode:
Point — для піксель-арту.
Bilinear / Trilinear — для плавності, але вони трішки більше навантажують GPU.

📌А якщо вже зовсім скрутно — використовуйте відзеркалення, як у Mario, але в основному важливо просто міняти Max Size🍄

💻 Gamedev | #оптимізація #текстури #стиснення #compression
🔥10😁321