Аналіз AAA-релізів
2021–2024 показує цікаву тенденцію: майже 70% великих ігор виходять між серпнем та листопадом, і ще 23% у лютому–березні.А от весняний період (квітень–червень) майже порожній, лише
14% релізів. [Джерело]💡 Що з цього випливає:
• Восени ви боретеся за увагу. Ринок переповнений релізами та святковими акціями. Гравці обирають лише кілька головних тайтлів, і менші проєкти ризикують залишитися непоміченими.
• Весна – шанс виділитися. Менше конкуренції = більше уваги для вашої гри. Гравці ще не втомилися від новинок, а маркетинг працює ефективніше. Для інді-проєктів це особливо цінно: можна збирати фідбек і формувати спільноту без шуму “великих релізів”.
• Січень–лютий і липень — тихі місяці. Активність гравців падає, рекламні кампанії працюють слабше, і немає масового попиту на нові ігри.
❓ Що станом на 2025 рік?
Ситуація ще більш показова. За даними
Newzoo, ігри, що виходять у перевантажений період серпень-листопад, отримують у середньому на 30–35% менше гравців за перші три місяці, ніж ті, що вийшли у квітні–червні.А весняний період залишається майже порожнім, але показує таку ж або навіть вищу залученість аудиторії. Менше конкуренції дозволяє ефективніше просувати гру та привертати увагу гравців без зайвих витрат на маркетинг.
А що ви думаєте про це? Чи варто ігнорувати всю цю статистику і випускати тоді, коли самі готові?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤2👍1🤔1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯16❤🔥6👀3❤1
У цьому відео показано, як написати код для виявлення об’єкта, підйому та кидання предметів у грі всього за 10 хвилин!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥11👍2🔥2
Якщо підсумувати оновлення, які Unity отримала за останні версії (читайте попередні пости за тегами #новини), то головний фокус розробників став очевидним — продуктивність і комфорт роботи.
Unity додала
Awaitable class — тепер асинхронний код можна писати через async/await без корутин і без зайвих алокацій. Менше лагів, більше контролю Не забуваємо за
[SerializeField], [Tooltip], [Header], [RequireComponent] та інші атрибути, які дозволяють підтримувати порядок у скриптах.UI? Тепер можна створювати інструменти прямо в редакторі через
UI Toolkit, а також робити з ним runtime UI, все в єдиному стилі.• Вимикайте
Domain Reload і Scene Reload, бо Play Mode запускається майже миттєво.• Додавайте власні меню через
[MenuItem] і працюйте швидше.• Розділяйте дані та логіку через
ScriptableObjects, оптимізуйте пам’ять із Addressables.• А
.asmdef файли помітно скорочують час компіляції.Unity 6.1 отримала Project Auditor — знаходить важкі місця в коді, невикористані ресурси та проблеми з продуктивністю.
Плюс класика: Memory Profiler, ProfilerMarker,
Debug.DrawRay() для візуалізації та кольорові Debug.Log() із тегами <color> і <b> для зручності.В принципі все те саме і більше є тут [Детальніше]
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3❤🔥2
🔄 Interpolate vs Extrapolate
Помічали, як іноді рух об’єктів виглядає рваним через різницю між
Але яка між ними різниця?
1️⃣ Interpolate (Інтерполяція)
Використовує попередні позиції об’єкта, щоб обчислити його положення на поточному кадрі. Рух виглядає точним і плавним, навіть якщо фізика оновлюється рідше, ніж кадри на екрані.
Мінус: невелика затримка в відображенні, бо об’єкт трохи “тягнеться” з минулого кадру.
2️⃣ Extrapolate (Екстраполяція)
Прогнозує майбутню позицію об’єкта на основі його поточної швидкості та напрямку. Добре працює для об’єктів з передбачуваним рухом — вони одразу показуються у новій позиції.
Мінус: якщо об’єкт різко змінює напрямок або швидкість, прогноз може трохи “промахнутись”.
Один вчиться на минулому, інший прогнозує майбутнє і сподівається, що вгадає😉
✈️ Gamedev | #факти #Interpolation #Extrapolation #SmoothMovement
Помічали, як іноді рух об’єктів виглядає рваним через різницю між
FPS та фізикою? Це джитер! Interpolate та Extrapolate допомагають зробити рух плавним і природним.Але яка між ними різниця?
Використовує попередні позиції об’єкта, щоб обчислити його положення на поточному кадрі. Рух виглядає точним і плавним, навіть якщо фізика оновлюється рідше, ніж кадри на екрані.
Мінус: невелика затримка в відображенні, бо об’єкт трохи “тягнеться” з минулого кадру.
Прогнозує майбутню позицію об’єкта на основі його поточної швидкості та напрямку. Добре працює для об’єктів з передбачуваним рухом — вони одразу показуються у новій позиції.
Мінус: якщо об’єкт різко змінює напрямок або швидкість, прогноз може трохи “промахнутись”.
Один вчиться на минулому, інший прогнозує майбутнє і сподівається, що вгадає
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10🔥3❤2👍1
Всім привіт 👋
📌 Тепер до діла: щосуботи ділимося своїми іграми, артами, скріншотами чи результатами роботи. Це може бути як концепт, так і вже готовий проєкт.
Ну що, хто покаже перший скрін?👀 🔥
✈️ Gamedev | #ScreenshotSaturday
📌 Тепер до діла: щосуботи ділимося своїми іграми, артами, скріншотами чи результатами роботи. Це може бути як концепт, так і вже готовий проєкт.
Ну що, хто покаже перший скрін?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥4🎉2
📌 Підсумок публікацій за тиждень:
Як завжди підсумок у одному пості! Зберігайте😁
🎓 Навчальні матеріали:
•🔥 8 атрибутів, які спрощують життя розробнику
•🚀 Підйом пердметів за 10 хвилин
• 🔄 Interpolate vs Extrapolate
🔨Корисне:
•🎵 Pixel RPG Music
•📱 Коротка стаття про оптимізацію в Unity 6
📰 Новини та цікаві теми:
•📱 Steam знову зламав власний рекорд!
•⬇️ Коли краще випускати гру: весна чи осінь?
•🤯 Імпровізована системи захоплення руху!
Не забуваємо, що у першому закріпленому повідомленні є вся потрібна інформація. Що
Та також, переглядайте та діліться своїми результатами у SCREENSHOT SATURDAY!
✈️ Gamedev | [Підтримати канал тут]
Як завжди підсумок у одному пості! Зберігайте
🎓 Навчальні матеріали:
•
•
• 🔄 Interpolate vs Extrapolate
🔨Корисне:
•
•
📰 Новини та цікаві теми:
•
•
•
Не забуваємо, що у першому закріпленому повідомленні є вся потрібна інформація. Що
# тут не просто так!Та також, переглядайте та діліться своїми результатами у SCREENSHOT SATURDAY!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍4😁4🔥2
☕️ Добрий ранок, геймдевелопери!
Сьогодні короткий лайфхак для тих, хто прокидається, відкриває Unity і замість коду бачить спам у консолі на кшталт:
🧩 У чому суть проблеми
Ця помилка з’являється в останніх версіях
В деяких випадках він «ламається», особливо коли є
🛠 Як це можна виправити
На форумах я знайшов декілька способів, в надійності яких я сумніваюсь, але мені допоміг один з них.
Якщо я правильно зрозумів, ця галочка повертає стару систему відображення інспектора, яка працює без UI Toolkit, а значить без багів👌
Виправіть, якщо у чомусь помилився. А хто ще знає методи, щоб уникнути цього?
✈️ Gamedev | #баги #фікси #Unity #UIToolkit #TMP
Сьогодні короткий лайфхак для тих, хто прокидається, відкриває Unity і замість коду бачить спам у консолі на кшталт:
ArgumentException: The state of the provided MeshGenerationNode is invalid (entry is null).
або
MeshGenerationContext is assigned to a VisualElement after calling ‘UnityEngine.UIElements.UIR.MeshGenerationCallback’. Did you forget to call ‘End’?
🧩 У чому суть проблеми
Ця помилка з’являється в останніх версіях
Unity 6000.x і пов’язана з тим, як Unity малює інспектор через UI Toolkit. В деяких випадках він «ламається», особливо коли є
List<GameObject> або складні посилання. Після цього інспектор може показувати порожні поля і без запуску видавати ось такі от помилки...🛠 Як це можна виправити
На форумах я знайшов декілька способів, в надійності яких я сумніваюсь, але мені допоміг один з них.
Edit → Project Settings → Editor → Inspector → Use IMGUI Default InspectorЯкщо я правильно зрозумів, ця галочка повертає стару систему відображення інспектора, яка працює без UI Toolkit, а значить без багів
Виправіть, якщо у чомусь помилився. А хто ще знає методи, щоб уникнути цього?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤3👍1
🌎 Масштабний збій AWS паралізував сервіси по всьому світу
Думаю, багато вже чули, але все ж скажу😅
Признавайтесь: хто сьогодні заходив у Clash Royale або Roblox і подумав, що вас забанили? А ні!
Все це через масштабний збій у роботі
Через проблему з DNS у регіоні US-EAST-1 тисячі людей не могли зайти у свої улюблені додатки: від Snapchat, Zoom, Duolingo та Canva до Fortnite і навіть британської податкової
ℹ️ За даними AWS, інженери вже усунули проблему, і більшість сервісів працює нормально, але ще можливі затримки та невеликі помилки під час відновлення.
✈️ Gamedev | #новини #AWS #Amazon #Cloud
Думаю, багато вже чули, але все ж скажу
Признавайтесь: хто сьогодні заходив у Clash Royale або Roblox і подумав, що вас забанили? А ні!
Все це через масштабний збій у роботі
Amazon Web Services (AWS) — хмарної інфраструктури, на якій працює купа сервісів по всьому світу. Через проблему з DNS у регіоні US-EAST-1 тисячі людей не могли зайти у свої улюблені додатки: від Snapchat, Zoom, Duolingo та Canva до Fortnite і навіть британської податкової
HMRC!Please open Telegram to view this post
VIEW IN TELEGRAM
⚡8😢1👀1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥4❤🔥2👍1
У сучасних системах здібностей (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 і керує виконанням.(Враховуючи, що цей код лише для прикладу, то [Детальніше тут])
Якщо говорити про плюси, така система дозволяє легко додавати нові ефекти без зміни основного коду і робить їх повністю повторно використовуваними.
Вона також забезпечує чітку архітектуру, що значно спрощує підтримку та масштабування ігрової механіки.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤🔥2⚡1🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍4❤🔥3✍2
Бачили ці круті відео про шейдери? Багато з них створював Бен Кловард – один із провідних Technical Artist із понад 20-річним досвідом.
Він співтворець
ShaderFX та автор Uber Shader для Maya, останні роки активно працював над Unity Shader Graph і вів популярний YouTube-канал із 75 000 підписників.🧩 2025 рік виявився складним для технологічної та геймінг-індустрії. Microsoft, EA, PLAION, Virtuos та King проводили скорочення персоналу, і Бен потрапив під одну з хвиль.
Що цікаво: він хоче продовжити щотижневі навчальні відео на YouTube.
А якщо ваша команда шукає досвідченого Technical Artist із глибокими знаннями шейдерів і оптимізації рендерингу – пишіть Бену
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
Вона дозволяє дизайнерам працювати зі звуками без коду, а програмістам через простий
API.Має фічі для плавного затухання, рандомізації, безшовних лупів і динамічних ефектів
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19⚡2👍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 | [Підтримати канал тут]
Як завжди підсумок у одному пості! Зберігайте
🎓 Навчальні матеріали:
• 👀 Зроби рух свого персонажа в 10 разів плавнішим з Root Motion!
•
📰 Новини та цікаві теми:
•
•
• 🌎 Масштабний збій AWS паралізував сервіси по всьому світу
🔨Корисне:
•
• ☕️ Як пофіксити помилку в інспекторі!
Не забуваємо, що у першому закріпленому повідомленні є вся потрібна інформація. Що
# тут не просто так!Та також, переглядайте та діліться своїми результатами у SCREENSHOT SATURDAY!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥13❤4🔥3👎2
🔄 Retention у відеоіграх: що це, які норми і як його підвищити
Якщо для вас це незнайоме слово тоді варто запам'ятати: Retention — це одна з ключових метрик виживання гри.
Вона показує, наскільки добре твій проєкт утримує гравців після першого запуску. Високі значення втримання свідчать про привабливий ігровий досвід і лояльність аудиторії, тоді як низькі сигналізують про проблеми.
❓ Зазвичай дивляться такі показники:
• Day 1 Retention (R1): скільки гравців повертаються наступного дня після встановлення.
• Day 7 Retention (R7): скільки залишаються через тиждень.
• Day 30 Retention (R30): скільки залишаються через місяць.
Формула проста:
📊 А як що до середніх показників? [Джерело]
На диво, якщо говорити про основні платформи, то різниця відрізняється кардинально.
🔹 Мобільні ігри:
• D1:
• D7:
• D30:
🔸ПК / Консолі:
• D1:
• D7:
• D30:
«Хороший профіль» утримання часто позначають як
Для прикладу гіперказуальні ігри (hyper-casual) мають швидке «скасування» тоді як з іншими жанрами ситуація в перспективі набагато краща. Також регіон, Північна Америка показує одні з найкращих показників. Серед країн виділяється і Японія, цілих D30:
🤑 Вплив Retention на LTV та монетизацію.
Тут і говорити багато не потрібно, бо відповідно чим більша залученість та % утримання аудиторії - тим більший дохід. Як зазначають фахівці:
❔ Як покращити Retention?
Найняти хорошого гейм-дизайнера. А якщо трішки роз'яснити, то зробити так, щоб перший вхід гравця в гру шокував його. У хорошому сенсі😉
Далі можна було би довго і довго говорити про систему винагород, щоденні бонуси, квести, Push-повідомлення та нагадування (що до речі є хорошою ідеєю), але якщо ідея хороша не менш важливим за ці всі пункти є контент: регулярні оновлення, святкові івенти і т.п.
Більше і більше цікавого, щоб захопити увагу гравця (не занадто багато, це теж важливо).
📌 Тому, якщо хочете заробити потрібно працювати :(
✈️ Gamedev | #запитання #retention #LTV #аналітика #геймдизайн
Якщо для вас це незнайоме слово тоді варто запам'ятати: 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% у США. [Інфа]Тут і говорити багато не потрібно, бо відповідно чим більша залученість та % утримання аудиторії - тим більший дохід. Як зазначають фахівці:
«...високий рівень утримання збільшує LTV гравця, адже він довше взаємодіє з продуктом»
❔ Як покращити Retention?
Найняти хорошого гейм-дизайнера. А якщо трішки роз'яснити, то зробити так, щоб перший вхід гравця в гру шокував його. У хорошому сенсі
Далі можна було би довго і довго говорити про систему винагород, щоденні бонуси, квести, Push-повідомлення та нагадування (що до речі є хорошою ідеєю), але якщо ідея хороша не менш важливим за ці всі пункти є контент: регулярні оновлення, святкові івенти і т.п.
Більше і більше цікавого, щоб захопити увагу гравця (не занадто багато, це теж важливо).
📌 Тому, якщо хочете заробити потрібно працювати :(
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12🔥2💯1
Трішки сумної статистики 😞
У 2025 році в Steam вийшло майже 13 тисяч нових ігор, але майже 40% з них не заробили навіть
Згідно аналітики Gamalytic майже дві третини заробили
У відкритій частині бази йдеться, що 47,4% продали менше ніж 100 копій, а ще 28% від 100 до 1000.
⚠️ Gamalytic зазначає, що їхні дані неповні, тож цифри можуть коливатись. Багато ігор з малою аудиторією не змогли заробити навіть мінімальні суми.
Серед них є безплатні експерименти та фан-проєкти, але загалом статистика показує масштаб “гри в нікуди”: більшість релізів виходять не заради прибутку.
Навіть зі ШІ, що здешевлює розробку, час, гроші та зусилля часто не окупаються.
❓А ви б ризикнули випустити гру в такому насиченому ринку?
✈️ Gamedev | #новини #steam #publish #ІндіРинок
У 2025 році в Steam вийшло майже 13 тисяч нових ігор, але майже 40% з них не заробили навіть
100$, що є сумою, яка дорівнює вартості публікації гри в магазині.Згідно аналітики Gamalytic майже дві третини заробили
<1000$ і лише 8% зібрали > $100 тис. Ситуація на ринку інді-ігор наступна: 30% найменш прибуткових проєктів заробили в середньому лише $37. У відкритій частині бази йдеться, що 47,4% продали менше ніж 100 копій, а ще 28% від 100 до 1000.
Серед них є безплатні експерименти та фан-проєкти, але загалом статистика показує масштаб “гри в нікуди”: більшість релізів виходять не заради прибутку.
Навіть зі ШІ, що здешевлює розробку, час, гроші та зусилля часто не окупаються.
❓А ви б ризикнули випустити гру в такому насиченому ринку?
Please open Telegram to view this post
VIEW IN TELEGRAM
😢9🔥4👀2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥23🔥4❤2😍1
This media is not supported in your browser
VIEW IN TELEGRAM
🎯 Drag & Launch у Unity 2D: Повний гайд з кодом та механікою
Хочеш реалізувати у грі механіку “потягни й кинь”, як у Angry Birds? Давай розберемо готовий приклад.
TrajectoryAimer2D: Симулює траєкторію об’єкта з урахуванням гравітації, відскоків і тертя. Відображає її точками, щоб гравець бачив, куди полетить об’єкт перед запуском.
DragController: Керує об’єктом, відстежує натискання, драг і відпускання, і розраховує силу запуску. Викликає
🧑💻 Код (C#):
1.
1️⃣ Відстеження натискання миші
Якщо обидві умови істинні, викликається метод
2️⃣ Drag() – процес драгування
Метод
Беремо поточну позицію миші у світі та обчислюємо відстань від початку драгування. Це визначає напрямок і силу. Далі обмежуємо максимальну відстань запуску, щоб гравець не тягнув об’єкт занадто далеко.
Розраховуємо сила запуску, яка буде застосована при відпусканні. Чим далі тягнемо – тим сильніше буде кидок. Та виходячи з даних об'єкта визначаємо очікувану траєкторію.
3️⃣ DragEnd() – завершення тягнення
Метод
Також повторно розраховуємо силу та відстань, щоб застосувати точну силу з обмеженнями. Після розрахунку використовуємо імпульсну силу яка відправить об'єкт у політ:
2.
На початку скрипта ми задаємо всі параметри для симуляції та візуалізації: кількість кроків (
1️⃣ ShowTrajectory() – розрахунок і відображення траєкторії
Метод викликається з
Далі проганяємося циклом, щоб прогнозувати нову позицію на кожному кроці і перевіряємо, чи буде зіткнення з колайдером.
2️⃣ Візуалізація траєкторії – SpawnDot()
Після того як ми розрахували всі точки траєкторії, метод
Тут ми також налаштовуємо прозорість крапок, щоб вони плавно зменшувалися до кінця траєкторії, роблячи її більш наочною та зрозумілою.
📌 Повна версія коду з коментарями тут [Клац]👈
✈️ Gamedev | #уроки #DragAndLaunch #туторіал
Хочеш реалізувати у грі механіку “потягни й кинь”, як у Angry Birds? Давай розберемо готовий приклад.
TrajectoryAimer2D: Симулює траєкторію об’єкта з урахуванням гравітації, відскоків і тертя. Відображає її точками, щоб гравець бачив, куди полетить об’єкт перед запуском.
DragController: Керує об’єктом, відстежує натискання, драг і відпускання, і розраховує силу запуску. Викликає
TrajectoryAimer для показу траєкторії та застосовує імпульс при відпусканні.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() створює маленькі об’єкти (крапки) у кожній позиції зі списку, щоб гравець бачив, куди полетить об’єкт.Тут ми також налаштовуємо прозорість крапок, щоб вони плавно зменшувалися до кінця траєкторії, роблячи її більш наочною та зрозумілою.
📌 Повна версія коду з коментарями тут [Клац]
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡7❤🔥4👍3🔥3