Хочу сделать инвентарь на object'ах в c++ проекте. Почитал информацию отсюда
http://shootertutorial.com/2015/12/15/c ... -tutorial/ и хочу сделать нечто подобное.
То что изложено в этой статье понял не очень хорошо ибо знание блюпринтов и английского языка у меня на низком уровне.
Из того что понял:
- нужно создать c++ класс наследуемый от ActorComponent, который будет представлять из себя хранилище предметов (инвентарь), иметь внутри себя массив из objet'ов, некоторую логику по взаимодействию с ними (использовать, съесть, выбросить и т.п.);
- подбираемые предметы будут реализовываться двумя классами: object и actor. Object для хранения данных о предмете и добавления предмета в массив при подборе в инвентарь, и Actor для отображения предмета на сцене при его выбрасывания из инвентаря;
- класс предмета Object хранит в себе ссылку на блюпринт наследуемый от класса actora для добавления предмета на сцену, а также иконку для отображения в инвентаре;
- класс предмета Actor хранит в себе помимо меша для отображения на сцене ссылку на Object класс для операции подбора в инвентарь;
- при подборе предмета в инвентарь Object класс по ссылке из Actor'а добавляется в массив в ActorComponent, а сам Actor полностью удаляется;
- при выбросе предмета из инвентаря по ссылке из Object на блюпринт от Actor'a создаётся новый объект на сцене.
Проблема у меня возникает в том как хранить ссылку на блюпринт от Actor'a в Object'e. Можно прописать путь блюпринт, но мне бы этого не хотелось т.к. дизайнеру в код лазать для того чтобы внести какие-либо изменения(переименовать блюпринт например) не понравится, да и неудобно это. UPROPERY ситуацию не решает ибо редактировать параметр через макросы можно только в блюпринтах от Actor'a(насколько мне известно) в книге "Unreal Engine 4 Scripting with C++ Cookbook" предлагают реализовывать Object'ы путём добавления UPROPERTY параметров (с ссылкой на нужный блюпринт) на глобально доступные элементы (GameMode например) и в момент создания объекта на сцене получать его так:
AChapter2GameMode *gm = Cast<AChapter2GameMode>(GetWorld()->GetAuthGameMode() );
if( gm )
{
UUserProfile* object = ConstructObject<UUserProfile>(
gm->UPBlueprintClassName );
}
Если я допустил какие-либо ошибки - прошу меня поправить. Есть ли другие способы указать ссылку на блюпринт от Actor'а в Object'e? Данный способ создания инвентаря оправдывает себя? Буду рад любым вашим мыслям по поводу реализации инвентаря на c++.