Предоставление констант 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, чтобы добиться этого? В этом случае все они будут целыми числами, но решения, которые работают с другими типами данных, чрезвычайно приветствуются.


person David    schedule 13.07.2015    source источник


Ответы (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")
};
person David    schedule 13.07.2015