Прошу оцінити систему ближнього бою у моєму проєкті на Unreal Engine

Вітаю, шановне товариство!

Я розробляю онлайн-гру про українських козаків на Unreal Engine. Нещодавно мені вдалося створити систему ближнього бою на шаблях. Натхненням для мене стала бойова механіка з Mount and Blade, яку я спробував відтворити у своєму проєкті.

Управління ударами шаблі здійснюється за допомогою напрямку миші. Атака починається з вибору траєкторії удару та замаху — для цього потрібно затиснути ЛКМ. Замах триває доти, доки гравець не відпустить ЛКМ. Щойно ЛКМ відпущено — відбувається сам удар шаблею. Також гравець може виконати швидкий удар, просто натиснувши на ЛКМ без затримки.

Прошу оцінити цю систему: наскільки комфортно, на вашу думку, було б грати в онлайн-гру з такою бойовою механікою? Що б ви додали або змінили, щоб покращити ігровий досвід? Буду вдячний за конструктивну відповідь.

Дякую за увагу!

P.S Прикріплюю відео, де можна поглянути на мою систему

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини про геймдев

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Скажите, а вы студентов рассматриваете для работы в вашей команде? Интересует в первую очередь практический опыт.В Вашем проекте с системой ближнего боя на шаблях можно было бы внедрить искусственный интеллект (АИ- агент) для улучшения игрового процесса. Вот несколько идей:

1. Умные противники (AI-боты)
Адаптивный ИИ: Боты анализируют поведение игрока и адаптируются к его стилю боя. Например, если игрок часто использует горизонтальные удары, противник начнет чаще блокировать их.
Разные стили боя: Создание разных типов врагов с уникальными паттернами атак и защитных реакций (например, агрессивные бойцы, осторожные защитники).(Например, польская сабля.)
Реалистичное поведение: Враги могут реагировать на окружение (отступать, если им некуда двигаться, искать укрытие).
2. Машинное обучение для улучшения анимаций и механики боя
Использование Reinforcement Learning (RL) для обучения виртуальных бойцов на основе реальных фехтовальных техник. Можно натренировать ИИ-модель, которая будет учитывать разные траектории ударов и предугадывать действия игрока.
Генерация натуральных анимаций с помощью ИИ (например, Motion Matching вместо традиционных анимационных деревьев).
3. Генерация диалогов и взаимодействия с NPC
ИИ-диалоги: NPC могут использовать GPT-подобные модели, чтобы отвечать на вопросы игрока, обучать его бою, давать исторические справки.
Голосовой ИИ: NPC могут озвучиваться в реальном времени с помощью Text-to-Speech (TTS) технологий.
4. Оптимизация сетевого кода и античит
Использование ИИ для предсказания сетевых задержек и компенсации лага (например, предугадывание движений игрока в PvP).
Обнаружение читеров с помощью нейросетей, анализирующих поведение игроков (например, слишком быстрые атаки, неестественное передвижение).
5. Процедурная генерация контента
ИИ может создавать новые карты, сценарии сражений или даже менять сложность ботов в зависимости от навыков игрока, или от других условий.

Ось кілька ідей, як її покращити, щоб зробити гру ще більш захопливою та комфортною для гравців:
1. Додавання блокування та парирування
Якщо у грі є PvP або AI-супротивники, важливо дати гравцю можливість захищатися.

🔹 Що можна зробити:
Ручне блокування (як у M&B) — гравець сам обирає напрямок блокування.
Автоматичний блок — для новачків (можна увімкнути в налаштуваннях).
Парирування — якщо блок поставлений у момент удару, противник отримує малий відскок або втрату рівноваги.

💡 Приклад: якщо парирування спрацьовує у правильний момент, можна зробити короткий слоумо-ефект і контратаку.

2. Різні типи атак та комбо
Щоб бойова система не була надто простою, варто урізноманітнити атаки.

🔹 Ідеї для атак:

Швидкі легкі удари (завдають менше шкоди, але можна комбінувати).
Сильні удари (довший замах, але більше шкоди).
Комбо — серія атак, якщо натискати ЛКМ у правильний момент.
💡 Приклад комбо:

Натискання ЛКМ → горизонтальний удар.
Швидке повторне натискання → вертикальний удар.
Пауза + ЛКМ → удар із розвороту.
3. Покращення відчуття удару (Impact Feedback)
Щоб удари відчувалися потужно, можна покращити візуальну та звукову складову.

🔹 Що покращить удар:
Коротке уповільнення при вдалому ударі (як у Ghost of Tsushima).
Глухий звук удару по броні / металу / плоті.
Кров / іскри (залежно від цілі).
Вібрація камери або легкий shake при сильному ударі.

💡 Додатково: можна зробити Force Feedback (вібрацію) для контролерів.

4. Реакція ворогів на удари
Щоб бої були живими, вороги повинні по-різному реагувати на атаки.

🔹 Ідеї для реакції:

Легкий удар → невеликий відступ / затримка в атаці.
Сильний удар → відкидання / падіння.
Рандомні анімації болю (щоб не виглядало повторювано).
💡 Приклад: якщо ворог отримує сильний удар у голову, він може похитнутися або впасти на землю.

5. Баланс між навичками та удачею
Якщо це онлайн-гра, важливо зробити бойову систему залежною від навичок гравця, а не лише від статистики персонажа.

🔹 Як досягти балансу:
Вікно парирування — не надто довге, щоб не було «спаму».
Чітка візуальна підказка перед атакою (рука, плечі супротивника рухаються перед замахом).
Стамінна система — якщо гравець багато махає шаблею, він швидко втомлюється.

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

6. Мережева оптимізація (якщо онлайн-гра)
Якщо це онлайн-бойова система, важливо зробити мінімальний лаг у передачі ударів.

🔹 Що варто врахувати:
Використовувати Client-Side Prediction — щоб гравець бачив удар миттєво.
Оптимізувати серверні запити (не відправляти зайві дані).
Додати анти-спам захист (не дозволяти спамити ударами без анімаційного завершення).

💡 Приклад: у Mordhau використовується система «чіткого визначення хіта», яка дозволяє вираховувати попадання навіть при поганому пінгу.
Хлопци що скажете?

Мне кажется, что можно еще добавить использование «Collision Overlap» (Capsule или Sphere Trace)
Можно настроить систему, в которой меч (или руки) персонажа имеют коллайдер, который проверяет соприкосновение с врагами.

🔹 Основные шаги для этой реализации будут такие:

Создаете Capsule Collider на руке или мече.
Включаете Generate Overlap Events и настройте коллизию.
В Blueprint или C++ добавьте функцию OnComponentBeginOverlap(), которая активируется при ударе.
✍ Пример кода в C++ (для коллизии сабли):

void AYourCharacter::OnWeaponHit(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, 
                                 UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, 
                                 bool bFromSweep, const FHitResult& SweepResult)
{
    if (OtherActor && OtherActor != this)  
    {
        AEnemy* Enemy = Cast<AEnemy>(OtherActor);
        if (Enemy)
        {
            Enemy->TakeDamage(20.0f); // Наносим урон
        }
    }
}
Мне кажется, что этот метод лучше подойдет для динамических ударов, где важно учитывать физику.

Ну, зараз трасировка для меча вже зроблена, яка враховує всіх хто підпадає під цю саблю :)

А почему вы не использовали Advanced Melee Combat System (на Marketplace) — продвинутая система с ударами, уклонениями или MCO (Melee Combat Overhaul) — боёвка в стиле Dark Souls?

На мій погляд соулс лайк бойовки більше підходять під дуель двох — чотирьох гравців. В мультиплеєр грі де грає 50+ людей або в тому M&B де на мапі бігає 200+ юнітів, швидкість пересування, повороту камери більш важливіша, ніж комбо удари

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

Не совсем с вами согласен. Если хотите сделать боевку, а именно удары во время движения (WASD + атака)более плавной и динамичной, лучше использовать Layered Animations + Blend Spaces, чтобы игрок мог бить и двигаться одновременно. В стандартной анимационной системе Unreal Engine 4 (Animation Blueprint) при атаке персонаж полностью переключается на боевую анимацию, игнорируя передвижение. Для того чтобы исправить это, есть несколько вариантов:
Blend Spaces 1D/2D
Можно создать Blend Space, который сочетает анимацию удара и бега. Например, если персонаж движется вперёд (W), анимация атаки накладывается смешением (blending), позволяя продолжать бег.
При нажатии удара (ЛКМ) анимация руки и торса воспроизводится отдельно от ног, что позволяет двигаться во время атаки.
Layered Animations (Animation Slots)
В Unreal Engine можно разделить тело на слои анимаций. Например, нижняя часть (ноги) продолжает играть анимацию движения, а верхняя (торс, руки) выполняет удары.
Для этого в Animation Blueprint создаются Animation Slots, в которых атаки проигрываются отдельно от движений ног.
Root Motion vs. In-Place Animation
Если вы используете Root Motion, персонаж может зависнуть во время атаки. В вашем случае лучше отключить Root Motion и использовать In-Place анимации, чтобы удары не мешали движению.

Вот пример кода C++ для атаки на ходу в Unreal Engine, пишу пока есть такая возможность.
Этот код позволит Вашему персонажу двигаться и атаковать одновременно, не блокируя входы управления.

// Заголовочный файл (YourCharacter.h)

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "YourCharacter.generated.h"

UCLASS()
class YOURGAME_API AYourCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    AYourCharacter();

protected:
    virtual void BeginPlay() override;

    // Функции для атаки и передвижения
    void StartAttack();
    void MoveForward(float Value);
    void MoveRight(float Value);

    // Таймер для удара
    void PerformAttack();

    // Флаг атаки
    bool bIsAttacking;

    // Компонент анимации
    UPROPERTY(EditAnywhere, Category = "Combat")
    UAnimMontage* AttackMontage;

public:
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
//Реализация (YourCharacter.cpp)
#include "YourCharacter.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "Animation/AnimMontage.h"
#include "GameFramework/PlayerController.h"

AYourCharacter::AYourCharacter()
{
    PrimaryActorTick.bCanEverTick = true;

    bIsAttacking = false;

    // Разрешаем движение во время атак
    GetCharacterMovement()->bOrientRotationToMovement = true;
}

void AYourCharacter::BeginPlay()
{
    Super::BeginPlay();
}

void AYourCharacter::MoveForward(float Value)
{
    if (Value != 0.0f)
    {
        AddMovementInput(GetActorForwardVector(), Value);
    }
}

void AYourCharacter::MoveRight(float Value)
{
    if (Value != 0.0f)
    {
        AddMovementInput(GetActorRightVector(), Value);
    }
}

void AYourCharacter::StartAttack()
{
    if (!bIsAttacking && AttackMontage)
    {
        bIsAttacking = true;
        PlayAnimMontage(AttackMontage);

        // Запускаем таймер для удара, чтобы не блокировать управление
        GetWorldTimerManager().SetTimer(
            TimerHandle,
            this,
            &AYourCharacter::PerformAttack,
            0.5f,  // Длительность удара
            false
        );
    }
}

void AYourCharacter::PerformAttack()
{
    bIsAttacking = false;
}

void AYourCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);

    // Движение
    PlayerInputComponent->BindAxis("MoveForward", this, &AYourCharacter::MoveForward);
    PlayerInputComponent->BindAxis("MoveRight", this, &AYourCharacter::MoveRight);

    // Атака
    PlayerInputComponent->BindAction("Attack", IE_Pressed, this, &AYourCharacter::StartAttack);
}
Описание работы цешного кода
Передвижение: персонаж продолжает двигаться, даже если нажата кнопка атаки.
Атака: когда игрок атакует (StartAttack), анимация удара проигрывается, но управление движением не блокируется.
Таймер удара (PerformAttack) автоматически сбрасывает флаг атаки, позволяя выполнять следующий удар.
Blend Space или Root Motion можно подключить для более плавного перехода между анимациями атаки и движения.
Теперь персонаж может бить и двигаться одновременно! 🚀 Если нужно добавить разные типы ударов, можно расширить этот код, добавив систему направлений атак (например, в зависимости от движения мыши).
Хлопцы будет интересно узнать ваше мнение. Критика приветствуется.

Ось кілька зауважень:
bIsAttacking — Рекомендується використовувати UPROPERTY(), якщо змінна має бути доступною в Blueprint або серіалізованою.
Функція PerformAttack() — Можна додати параметр для зміни швидкості атаки або її анімації.
GetWorldTimerManager().SetTimer() — Краще використовувати делегати або систему завдань Unreal Engine для більшої гнучкості.
bOrientRotationToMovement = true; — Це може впливати на анімації атак, варто перевірити, чи не конфліктує з механікою бою.
PlayAnimMontage(AttackMontage); — Переконайтеся, що анімація не блокує інші дії, використовуючи Montage_IsPlaying().

Виглядає перспективно. Не плануєте додавати систему фіксування на цілі?
І одна порада від дилетанта: Вам варто для себе розуміти, на який тип боїв буде оірєнтована кінцева гра: на більш дуельні бої, чи бої проти більших груп ворогів.
Привід Цусіми цю проблему вирішує ідеально: з одного боку, там є бої проти досить великих груп ворогів (наприклад при зачистці таборів монголів), але окремо в грі пропрацьовані дуельні механіки.
Приклад, коли гра з цим не впоралась — Star Wars. Jedi. Survivor. механічного гра заточена більше під дуелі, тому у боях проти декількох сильних ворогів гра відчувається дещо не добре. Хоча в цілому хороша..

Дуже гідно можна вдосконалювати, це ж демка, а не готовий продукт

Для початку дуже непогано

Для інді розробки та ще й для демки, це не шляпа, це топ

Сама система, може і має право на існування, але вона майже повністю протилежна самій фантазії бою на шаблях. Будь-яка холодна зброя в реальності має свій умовний мувсет з якимось найбільш складними і видовищними рухами. Я щойно подивився декілька спарингів на шаблях. Всі бої дуже швидкі. кожен фехтувальник робить комбо і дуже багато блоків.
Якщо перевести це в ігрові механіки, то ближче всього буде умовний Rise of Ronin або Ghost of Tsushuma, але треба цю систему стилів, блоку і perfect parry адаптувати під мультіплеєр. Однозначно потрібно буде ввести стаміну і якусь спешл шкалу. Не знаю, мені здається, що можна взагалі якійсь ідеї взяти у Soul Calibur і адаптувати під іншу камеру.

Так, згоден. Перед розробкою, я думав зробити бойовку як в тому ж

Ghost of Tsushuma

й інших Souls like проєктах. Я вирішив все ж таки прив’язатися до миші, оскільки мені здається це полегшує й інші механіки. Наприклад замінивши шаблю на сокиру, можна буде рубати дерева так само як і ворогів ))

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

видовищними

", додати наприклад зцепки з шаблею іншого гравця.

Як для старту дуже непогано, але:

Почну с того шо сабля відверто складна зброя для ігор.

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

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

Гарний поінт, спробую зробити переходи в інші позиції і додати хелпер. Мені більше подобається хелпер у Kingdom Come Deliverance )

Треба попрацювати з фідбеком від попадань та загалом від відчуття зброї, бо поки що виглядає не зрозуміло коли ти потрапив по ворогу, по його шаблі і тд. Рекомендую подивитись більш нові референси наприклад Mordhau, Chivalry 2, та інші мультіплеерні слешери. Гарно що додали аудіо фідбек. Також виглядає наче достатньо складно попасти по ворогу, можливо з контролем камери щось не так. Рекомендую потестувати таргет лок як в Souls like іграх наприклад. Зазвичай ця механіка так чи інакше реалізована у більшості гарних слешерів, щоб гравцю було простіше контролювати персонажа в просторі по відношенню до супротивника.
Також можна подивитись, щодо козаків саме, є гра Hellish Quart. Вона більш на фізиці працює,це трішки не ваш напрямок тож це скоріше референс до анімацій, візуалу, відчуттів і т.д.

Так, так. Таргет лок обов’язково протестую. Щодо

Hellish Quart.

то анімації у відео в цьому пості, створені розробниками Hellish Quart (вони до створення гри займалися Motion Capture і продають досі свої паки анімацій).

Також виглядає наче достатньо складно попасти по ворогу, можливо з контролем камери щось не так.

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

Схоже на систему , як у Баннерлорді , виглядає гарно, але щоб оцінити весь спектр, як буде почуватися боївка, мені здається тре побачити більше варіативності.
Поки виглядає перспективно.
Я так розумію усе на блупрінтах, поки хардкодом, без використання GAS?

так, поки що ООП + Блюпрінти по олд скул. Спочатку планував робити повністю на C++, але дійшов висновку що це дорого по часу розробки.

Можливо згодом спробую GAS.

Прикольно! Вивчали якось окремо бій на шаблях?

Так, але не сильно запарювався в цьому плані. Головні ідеї черпаю з Mount and Blade, а також Hellish Quart.

Підписатись на коментарі