Полноценная боевая система для создания 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).
- Игрок: Добавьте
RpgCharacter,RpgAttackControllerиRpgEvadeController. - Враги/NPC/питомцы: Добавьте
RpgCharacterи настройте нужные ресурсы (HP,Mana,Stamina,Shieldили custom ID). - Атаки: Создайте
RpgAttackDefinition(Melee/Ranged/Aoe) и назначьте его в контроллер. - Урон: Используйте Unity-теги для разделения фракций (враги атакуют игрока, игрок — врагов).
RpgCharacter сохраняет уровень, XP, upgrade points, ресурсы, статы, баффы и статусы через SaveProvider, если включён persistence-блок и задан save key. Для обычных врагов сохранение можно не включать.
Все параметры атак вынесены в файлы. Вы можете мгновенно изменить радиус взрыва или скорость полета снаряда во время игры без перекомпиляции.
- На объект кнопки или триггера добавьте
RpgNoCodeAction. - Выберите действие
TakeDamage. - Укажите цель с
RpgCharacter. - Задайте
Amount(базовый урон). - Смонтируйте вызов
Execute()на событие клика или столкновения.
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} отравлен!");
}
}
}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);
}
}