Добавить в корзинуПозвонить
Найти в Дзене
Уроки по Unreal Engine

Полный успех

Полный успех! Большая часть функционала системы атрибутов работает, но пока только для одной сущности. Для множества ещё не пробовал. В системе огромное количество массивов (Array, Map) с частым чтением и записью и была проблема, что во время итераций или поиска данные могли модифицироваться другими функциями. И если итератор проводил проверки перед началом работы, то в какой-то момент они становились не актуальными из-за изменённых данных. Решением было добавить блокировки на запись и чтение, пока выполняется операция. Это добавило ещё больше проблем, но в итоге я разобрался и теперь вроде как все работает правильно. Ещё предстоит исправить некоторые косяки, все оптимизировать и прибраться в коде. Сейчас есть мощный конфиг для настройки классов. В нем предстоит потратить много времени, чтобы все настроить, но это куда легче, чем настраивать в коде или блюпринтах. К тому же класс можно дублировать и большинство настроек уже будут и нужно будет изменить только отличающиеся. Ка

Полный успех!

Большая часть функционала системы атрибутов работает, но пока только для одной сущности. Для множества ещё не пробовал.

В системе огромное количество массивов (Array, Map) с частым чтением и записью и была проблема, что во время итераций или поиска данные могли модифицироваться другими функциями. И если итератор проводил проверки перед началом работы, то в какой-то момент они становились не актуальными из-за изменённых данных.

Решением было добавить блокировки на запись и чтение, пока выполняется операция. Это добавило ещё больше проблем, но в итоге я разобрался и теперь вроде как все работает правильно. Ещё предстоит исправить некоторые косяки, все оптимизировать и прибраться в коде.

Сейчас есть мощный конфиг для настройки классов. В нем предстоит потратить много времени, чтобы все настроить, но это куда легче, чем настраивать в коде или блюпринтах. К тому же класс можно дублировать и большинство настроек уже будут и нужно будет изменить только отличающиеся.

Как я говорил ранее, атрибуты - это вообще любые качества, которые вы можете придумать для юнитов или зданий. Все создается в конфиге через геймплейные теги. Все атрибуты хранятся в менеджере, а не сущностях и поэтому чтобы получить данные конкретной сущности вам не нужно вытягивать их напрямую. Вам достаточно в запросе указать тег и сущность т получите результат. Классы можно менять в игре. Добавление и удаление атрибутов не поддерживается внутри игры. Потому что это происходит через смену класса. Любой атрибут вы можете менять на указанную величину. Например чтобы нанести урон, чтобы повысить счетчик количества рабочих или указать какое количество ресурсов юнит забрал из шахты. Одна система для всего.

Но помимо этого есть ещё таймеры с группами приоритетов. Это нужно для создания регенерации или наоборот постепенного уменьшения чего либо. Это создаётся через модификаторы внутри классов. Выбираете атрибут, значение (per second) и состояние, для которого применяется модификатор (во время игры так же можно добавлять и удалять постоянные и временные модификаторы).

Как это работает? Создаёте в классе здания модификатор для атрибута Health, устанавливаете значение на -2 и указываете состояние Burn. Это базовый модификатор, каждый раз, когда зданию будете ставить тег Burn - оно начнёт терять здоровье на 2 единицы в секунду. Если вы прокачаете здание чтобы оно имело сопротивление огню, то можно установить такой же модификатор со значением +1 и тогда итоговое потребление здоровья будет 1 (-2+1).

Но это не значит, что каждую секунду будет тикать таймер. Для этого и есть группы приоритета. Периодичность вы сами настраиваете. А если выводите виджет на экран с показателем здоровья, то вы хотите плавное изменение данных, то повышаете приоритет и таймер будет работать чаще.

Теги для приоритетов так же настраиваются в конфиге. Если ваша сущность не имеет на старте ежесекундных модификаторов, то все это тоже можно настроить.

Пока писал - нашел в логике уязвимости) для этого, собственно, и пишется этот монолог, чтобы ещё раз в голове прокрутить, как работает система.