Полезное

Мы Вконтакте

Discord канал

#
Пред.
Аватара пользователя
Пользователь
Сообщения: 2319
я думаю многим пригодится помимо меня:
Изображение

субменю для класса с установкой значений, для создания обекта из класса с нужными значениями.
это позволит создавать более гибкую и настраиваемую систему. аналогичный функционал есть у AI perception, ChildActor component. Меняя главный класс меняеются и переменные компонета.

какая либо помощь? реализация?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 154
Насколько я помню это делается при помощи свойства
https://docs.unrealengine.com/latest/IN ... Instanced/

Код:
UPROPERTY(EditDefaultsOnly, Instanced, Category = "Test")
TArray<UObject*> TestConfigInstanced;
Аватара пользователя
Пользователь
Сообщения: 2319
WssIDs , да это похоже на то что нужно, спасибо

_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
такс... получилось
Изображение
оставлю пример тут, авось кому пригодится:

конфиг:
Код:
#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "uConfig.generated.h"

UCLASS(Blueprintable, abstract, EditInlineNew )
class CPP_TRY_API UuConfig : public UObject
{
   GENERATED_BODY()

   public:
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Test")
      bool myBool;
};


установка конфига:
Код:
#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyObject.generated.h"

class UuConfig;

UCLASS(EditInlineNew, Blueprintable, meta = (BlueprintSpawnableComponent) )
class CPP_TRY_API UMyObject : public UObject
{
   GENERATED_BODY()

   public:
      UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = "Test")
      TArray<UuConfig*> TestConfigInstanced;
};

_________________
we need to go deeper
Последний раз редактировалось Snake 04 июл 2017, 19:11, всего редактировалось 1 раз.
Аватара пользователя
Пользователь
Сообщения: 2319
WssIDs, еще раз спасибо за правильное направление! я мечтал о такой штуке последние пол года ) УРа!

и вдогонку вопрос: этого точно нельзя из принтов сделать? похоже что можно было б обойтись несколькими галками в настройках переменных?

и второй вопрос: #include блуепринт класс как сделать?
и третий: возможно ли добавить такие свойства переменных уже созданному блуепринт(!) классу? (добавить одну переменную из С++ блуепринту)
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 154
По первому вопросу: наверно нет, видел как-то на офф. форуме как это сделали, но это были правки в KismetCompiler, соотв нужен движок собранный из исходников.
по второму: не понял немного.
UBlueprint находится в модуле Engine, значит если уже добавлен CoreMinimal.h, то UBluprint должен быть доступен без #include.
По третьему вопросу: Можно переопределить родителя, в котором уже есть эта переменная.

Кстати для класса в примере выше можно добавить свойство BlueprintType и тогда при смене класса, не будут закрываться уже открытые категории.
Аватара пользователя
Пользователь
Сообщения: 2319
по второму вопросу уточню:
допустим есть БП клас - BP_MyActror.

И есть С++ класс myObject
и в нем уже не получится сделать:

#include "BP_MyActror.h"
или
class BP_MyActror;

c++ не видит БП классы. и не получается ее задать как переменную например.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 154
По поводу этого есть ответ на answerhub

https://answers.unrealengine.com/questi ... es-in.html

Я придерживаюсь такой же позиции. Основной класс, все-таки нужно делать на С++, а уже остальное можно на Blueprint. У меня общий класс транспорта написан на С++ (является абстрактным) а остальные классы-наследники созданы на Blueprint. Исходя из этого я могу свободно добавить нужную переменную с различными UPROPERTY без проблем.

В вашем варианте я бы создал этому классу нового родителя на С++.
Аватара пользователя
Пользователь
Сообщения: 2319
а как скрыть некоторые переменные из меню...
сейчас видны все переменные которые есть у конфиг-класса в суб-меню у этого класса.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
я правильно понимаю что инстансед переменные можно только как реф указывать?

тоесть нельзя их указать как класс

Код:
     UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = Any)
     TArray< TSubclassOf<UuConfig> > ArrayOfClasses;

Ошибка      'Instanced' cannot be applied to class properties (UClass* or TSubclassOf<>)


тоесть такие переменные это уже "сконструировнные" классы? тоесть они уже загруженны если содержащий такой конфиг класс создан?

Изображение

Код:
   
public:
   UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = "Test")
   TArray<UuConfig*> TestConfigInstanced;


   UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Any)
   TArray<TSubclassOf<UuConfig>>  ArrayOfClasses;

еще раз уточню вопрос:
если я заспавню(констракт обжект фром класс) обьект сожержащий такой инстансед массив рефов, то они будут существовать в памяти.
и не нужно писать логику их создания(законстрактить или спавнить)?

что вроде как бы логично , класс один, а инстансы это рефы с другими переменными в данном случае. Но я невежественен когда касается ++, так что подтвердите пожалуйста.
_________________
we need to go deeper
Последний раз редактировалось Snake 07 июл 2017, 08:32, всего редактировалось 1 раз.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница