Пытаясь собрать проект, после создания пауна или актёра, проект просто ругался в студии и создаваться на отрез отказывался. После долгих манипуляций, я выяснил, что причина была в том что он не мог сгенерировать файл по умолчанию который прописывается в заголовке и по факту не существует(генерируется после старта сборки проекта) Причина до банальности проста, надо заменить GENERATED_BODY() на GENERATED_UCLASS_BODY().
Данную особенность в unreal engine я заметил достаточно давно, но решил разобраться с чем связано это и наткнулся на пост, процитирую.
Hello, ubi
Please note that with
GENERATED_BODY()
, a constructor is no longer necessary for each class (however, if you need a constructor, you can declare and define it as usual). The other difference is that, in comparison toGENERATED_UCLASS_BODY()
,GENERATED_BODY()
doesn’t have thepublic
specifier in it, so any class members that are declared after it areprivate
by default (you can explicitly declare them aspublic
). In your situation, please make sure that you have your constructor declared and defined correctly://.h file //... GENERATED_BODY() public: AFPSGameMode(const class FObjectInitializer& ObjectInitializer); // .cpp file AFPSGameMode::AFPSGameMode(const class FObjectInitializer& ObjectInitializer) { // constructor functionality }
Простыми словами. Все классы по умолчанию в С++ являются приватными. Обявляя или переопределяя новый класс, вы его должны определить как публичный, иначе проект не скомпрометируется.
Если у вас есть необходимость скомпилировать класс с приватным методом доступа в Unreal необходимо прописывать GENERATED_UCLASS_BODY(). Для публичных классов следует ставить макрос GENERATED_BODY().