Unreal Engine 4
http://uengine.ru/forum/

Субменю в переменных с настройкой класса
http://uengine.ru/forum/viewtopic.php?f=19&t=7077
Страница 1 из 5

Автор:  Snake [ 04 июл 2017, 06:24 ]
Заголовок сообщения:  Субменю в переменных с настройкой класса

я думаю многим пригодится помимо меня:
Изображение

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

какая либо помощь? реализация?

Автор:  WssIDs [ 04 июл 2017, 14:24 ]
Заголовок сообщения: 

Насколько я помню это делается при помощи свойства
https://docs.unrealengine.com/latest/IN ... Instanced/

Код:
UPROPERTY(EditDefaultsOnly, Instanced, Category = "Test")
TArray<UObject*> TestConfigInstanced;

Автор:  Snake [ 04 июл 2017, 18:13 ]
Заголовок сообщения: 

WssIDs , да это похоже на то что нужно, спасибо

Автор:  Snake [ 04 июл 2017, 19:01 ]
Заголовок сообщения: 

такс... получилось
Изображение
оставлю пример тут, авось кому пригодится:

конфиг:
Код:
#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;
};

Автор:  Snake [ 04 июл 2017, 19:06 ]
Заголовок сообщения: 

WssIDs, еще раз спасибо за правильное направление! я мечтал о такой штуке последние пол года ) УРа!

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

и второй вопрос: #include блуепринт класс как сделать?
и третий: возможно ли добавить такие свойства переменных уже созданному блуепринт(!) классу? (добавить одну переменную из С++ блуепринту)

Автор:  WssIDs [ 04 июл 2017, 20:15 ]
Заголовок сообщения: 

По первому вопросу: наверно нет, видел как-то на офф. форуме как это сделали, но это были правки в KismetCompiler, соотв нужен движок собранный из исходников.
по второму: не понял немного.
UBlueprint находится в модуле Engine, значит если уже добавлен CoreMinimal.h, то UBluprint должен быть доступен без #include.
По третьему вопросу: Можно переопределить родителя, в котором уже есть эта переменная.

Кстати для класса в примере выше можно добавить свойство BlueprintType и тогда при смене класса, не будут закрываться уже открытые категории.

Автор:  Snake [ 05 июл 2017, 06:43 ]
Заголовок сообщения: 

по второму вопросу уточню:
допустим есть БП клас - BP_MyActror.

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

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

c++ не видит БП классы. и не получается ее задать как переменную например.

Автор:  WssIDs [ 05 июл 2017, 11:16 ]
Заголовок сообщения: 

По поводу этого есть ответ на answerhub

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

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

В вашем варианте я бы создал этому классу нового родителя на С++.

Автор:  Snake [ 07 июл 2017, 07:30 ]
Заголовок сообщения: 

а как скрыть некоторые переменные из меню...
сейчас видны все переменные которые есть у конфиг-класса в суб-меню у этого класса.

Автор:  Snake [ 07 июл 2017, 08:17 ]
Заголовок сообщения: 

я правильно понимаю что инстансед переменные можно только как реф указывать?

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

Код:
     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;

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

что вроде как бы логично , класс один, а инстансы это рефы с другими переменными в данном случае. Но я невежественен когда касается ++, так что подтвердите пожалуйста.

Страница 1 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/