Предоставление констант C ++ для чертежей в Unreal

Я ищу способ предоставить чертежу доступ к предопределенным константам, которые я создам в классе AActor.

По сути, я хочу, чтобы они содержали мой код в своих чертежах. Например, в строгом коде я могу использовать макросы препроцессора следующим образом:

#define kDirectionUp 0
#define kDirectionDown 1

Или я могу просто использовать константы:

const int kDirectionUp = 0;
const int kDirectionDown = 1;

Затем, вместо того, чтобы запоминать число (0..3) и то, к чему они все относятся, я могу просто напечатать

doSomething(kDirectionUp);

Это не большое дело для этого конкретного диапазона, но у меня есть другие, которые имеют около 8 различных чисел, которые все представляют разные значения. Это было бы болезненно при работе с чертежами, не говоря уже о том, что трудно отладить и трудно любому другому программисту узнать, что означает каждое из этих мистических чисел.

Я хочу воспроизвести это поведение в чертежах, чтобы в некоторых местах можно было просто вставить константу, вместо того, чтобы запоминать список из 12 или около того целых чисел.


Идея в том, чтобы они были статичными, поэтому UPROPERTY не будут работать здесь (насколько я знаю).

Мои единственные идеи до сих пор заключались в том, чтобы создать функции для каждой константы, которую я могу вызвать, которая просто возвращает рассматриваемое число, но это не самое красивое решение, не говоря уже о том, что им также необходимо иметь параметры какого-то вида, которые просто должны быть чайники в этом случае. Это безобразно

Есть ли какой-нибудь способ для меня, чтобы выставить постоянные значения для Blueprints в Unreal, чтобы достичь этого? В этом случае все они будут целыми числами, но решения, которые работают для других типов данных, очень оценили.

1

Решение

После еще нескольких копаний я обнаружил, что Unreal Blueprints поддерживают перечисление!

Похоже, это сработало для меня. Необходимость преобразования целых чисел в перечисляемые значения с помощью скрининга не является идеальной, но это намного чище, чем необходимость иметь ряд операторов ветвления для проверки целочисленных значений.

UENUM(BlueprintType)
enum class EDirection : uint8
{
D_Up = 0    UMETA(DisplayName = "Up"),
D_Right = 1 UMETA(DisplayName = "Right"),
D_Down = 2  UMETA(DisplayName = "Down"),
D_Left = 3  UMETA(DisplayName = "Left")
};
0

Другие решения


По вопросам рекламы [email protected]