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/ |