Skip to content

Latest commit

 

History

History
109 lines (83 loc) · 5.61 KB

File metadata and controls

109 lines (83 loc) · 5.61 KB

Модуль RPG

Полноценная боевая система для создания RPG в 3D и 2D. Центральный компонент персонажа — RpgCharacter: ресурсы, статы, баффы, статусы, рост уровня, сохранение и Mirror-мультиплеер находятся в одном API.

Содержание


Назначение

Модуль RPG предназначен для быстрой сборки боевых механик любой сложности (от простого кликера до комплексной Action-RPG). Он разделяет данные об атаках (AttackDefinition) от логики выполнения, позволяя переиспользовать способности между игроком и NPC.


Оглавление файлов

  • RpgCharacter — универсальный персонаж для игрока, NPC, мобов, питомцев и разрушаемых объектов.
  • RpgCharacterTemplate — SO-шаблон ресурсов, статов, эффектов и progression.
  • RpgProgressionDefinition — режим роста уровня: all-stats, manual upgrades или hybrid.
  • RpgAttackController — управление очередью и запуском атак.
  • RpgAttackDefinition — ScriptableObject с параметрами атаки.
  • RpgEvadeController — система уклонений и i-frames.
  • RpgNoCodeAction — мост для UnityEvents.
  • RpgConditionAdapter — RPG-условия для NeoCondition.
  • RpgResourceBinding / RpgStatBinding — реактивная привязка ресурсов и статов к UI/NoCode; вывод текста и прогресс-баров делайте через общий Neo.NoCode.
  • RpgStatsDamageableBridge — legacy-мост для старого AttackSystem (IDamageable/IHealable -> RpgCharacter).

Как использовать

  1. Игрок: Добавьте RpgCharacter, RpgAttackController и RpgEvadeController.
  2. Враги/NPC/питомцы: Добавьте RpgCharacter и настройте нужные ресурсы (HP, Mana, Stamina, Shield или custom ID).
  3. Атаки: Создайте RpgAttackDefinition (Melee/Ranged/Aoe) и назначьте его в контроллер.
  4. Урон: Используйте Unity-теги для разделения фракций (враги атакуют игрока, игрок — врагов).

Ключевые концепции

Persistence (Сохранение)

RpgCharacter сохраняет уровень, XP, upgrade points, ресурсы, статы, баффы и статусы через SaveProvider, если включён persistence-блок и задан save key. Для обычных врагов сохранение можно не включать.

Data-Driven Attacks

Все параметры атак вынесены в файлы. Вы можете мгновенно изменить радиус взрыва или скорость полета снаряда во время игры без перекомпиляции.


Примеры использования

1. Нанесение урона кнопкой (No-Code)

  1. На объект кнопки или триггера добавьте RpgNoCodeAction.
  2. Выберите действие TakeDamage.
  3. Укажите цель с RpgCharacter.
  4. Задайте Amount (базовый урон).
  5. Смонтируйте вызов Execute() на событие клика или столкновения.

2. Изменение статов (C#)

using Neo.Rpg;
using Neo.Rpg.Components;
using UnityEngine;

public class PoisonTrap : MonoBehaviour
{
    [SerializeField] private StatusEffectDefinition poisonStatus;

    private void OnTriggerEnter(Collider other)
    {
        if (other.TryGetComponent(out RpgCharacter character))
        {
            character.ApplyStatus(poisonStatus);
            Debug.Log($"{other.name} отравлен!");
        }
    }
}

3. Запуск атаки из аниматора (C#)

using Neo.Rpg;
using UnityEngine;

public class AttackAnimationListener : MonoBehaviour
{
    [SerializeField] private RpgAttackController attackController;

    // Вызывается через AnimationEvent
    public void OnSwordSwingHit()
    {
        // 0 - индекс Primary Attack в массиве контроллера.
        // false - говорит системе, что это действие не от инпута, а от кода.
        attackController.TryPerformAttack(0, false);
    }
}

См. также