У меня есть класс, описывающий некоторый объект со свойствами, например предмет инвентаря. И наряду с конструктором по умолчанию мне нужен параметризованный конструктор для создания элементов с определенным набором параметров, например, размером)
UCLASS()
class xxx_API UItem : public UObject
{
GENERATED_BODY()
public:
UItem();
~UItem();
UItem(int _size);
UPROPERTY(BlueprintReadOnly, Category = "Parameters")
int size = 0;
};
И у меня есть еще один класс, который я хочу использовать в качестве контейнера для предопределенногопредметы, так что я могу иметь ссылки на него из других мест игры.
UCLASS()
class xxxx_API UItemsContainer : public UObject
{
GENERATED_BODY()
public:
UItemsContainer();
~UItemsContainer();
UItem SomeItem = UItem(100);
};
Так что я могу в начале игры создать этот контейнер предметов
ItemsContainer = NewObject<UItemsContainer>();
И затем добавить егок некоторому набору предметов определенной сущности, подобному этому
TArray<UItem*> CharacterItems = {};
CharacterItems.Add(&ItemsContainer.SomeItem);
Поскольку предметы являются фиксированными и не будут меняться во время игры, я не хочу создавать конкретный объект для каждого из них, а просто иметь ссылки на записи контейнера.
Хотя при компиляции я получаю ошибку, что пытаюсь получить доступ к закрытым членам класса UItem. Хотя, его конструктор общедоступен, а все свойства общедоступны. Я думаю, что в UClass есть что-то, что не позволяет мне использовать конструктор таким образом, так как я могу делать это с объектами, которые не являются UObject. Но мне нужно, чтобы он был UObject, чтобы его можно было использовать в чертежах. И я не знаю, как вызвать конструктор не по умолчанию другим способом. Вероятно, я могу создать объект по умолчанию с NewObject, а затем инициализировать его и сохранить в массиве, но, похоже, будет слишком много кода и сложностей. Любые предложения, пожалуйста?