Привет
У меня вопрос, можно ли как-то организовать все лучше?
У персонажа есть инвентарь - массив структур FItemStack в котором имеется поле FGameplayTag ID.
Из инвентаря можно взять предмет в "руку" - в Actor предмета есть функция Update, которая принимает FItemStack и берет все нужные данные из DataAsset предметов (меш, анимации, etc)
У предмета есть состояния, которые организованы как UObject UItemState, в свою очередь эти состояния могут иметь длительность - подкласс UItemStateTimed.
Проблема в том, что каждому такому состоянию с длительностью должна соответствовать анимация предмета.
Сейчас это организовано так - в каждом подклассе UItemStateTimed есть захардкоденное название секции анимационного монтажа, который ставится предмету из DataAsset в той же функции Update.
Проигрывание секции вызывается через метод PlayAnimation(SectionName), после проигрывания состояние удаляется - происходит переход к предыдущему состоянию, с этим проигрывается секция предыдущего состояния.
Однако в этом методе есть баг - как секция заканчивается, меш предмета переходит в ref pose, а потом на секцию другого состояния - происходит сильный "скачок"
Было бы интересно узнать, как можно это исправить.
Думал над вариантом заменить монтаж на мапу <FName, UAnimationAsset*> и проигрывать анимации как отдельные ассеты.