В системе у меня есть различные классы и интерфейсы, все из которых присущи пустому интерфейсу «IAbilitySystem».< /p>
Эти классы имеют различные поля типов данных float и int, которые система использует для расчета того, как работает способность (т. е. урон, дальность ближнего боя, разброс, область действия, скорость снаряда и т. д.). В каждом из этих полей используется настраиваемый атрибут «Изменяемый».
У меня есть интерфейс «Статистика» для хранения и расчета чисел характеристик персонажей (т. е. HP персонажа, Сила, % недостающей маны). , уровень и т. д.)
У меня также есть класс «Модификатор», который может принимать собственное число с плавающей запятой «ModRatio» и некоторое число из класса «Stat» и увеличивать значения любых «изменяемых» значений. ' поля в любом классе, который реализует IAbilitySystem всякий раз, когда это значение вызывается чем-то другим.
Я хотел бы настроить эту систему так, чтобы класс «Модификатор» можно было использовать в общих чертах (т.е.: Modifier где T : IAbilitySystem).
Я думаю, что это позволит мне создать перечисление в «Модификаторе» с именем «Цель модификатора», которое может динамически заполнить себя всеми именами Полей с атрибутом «Модифицируемый», относящихся к типу «Т». Это позволило бы мне хранить все модификаторы для определенного типа «Способностей» в одном списке (
Код: Выделить всё
List modsМоя конечная цель — иметь возможность создавать разные способности как объекты, допускающие сценарии в единстве, и иметь возможность использовать инспектор для назначения базовых значений и с легкостью редактировать любые модификаторы. Мне нравится, как Unity может перечислить все возможные значения поля перечисления в раскрывающемся меню.
Я хотел бы знать, на правильном ли я пути к решению или есть ли это лучший способ реализации такой системы.
Кроме того, мне бы хотелось, чтобы «Модификатор» также мог иметь собственный список «Модификаторов» (т. е.: использование статистики для настроить ModRatio Модификатор).
Я создал базовую версию со всеми классами и интерфейсами.
Подробнее здесь: https://stackoverflow.com/questions/792 ... se-on-type
Мобильная версия