[UE4] 열거형의 값으로부터 표시명을 취득하는 노드의 거동이 에디터와 패키지로 다를 수 있다

2608 단어 C++Blueprint위 4

소개


  • 검증 환경은 UE4.25.3입니다.

  • 열거형의 값으로부터 표시명을 취득하는 노드란?



    이것입니다.

    예를 들어, 다음과 같은 열거형 정의가 있다고 가정합니다.

    c++
    UENUM(BlueprintType)
    enum class EEnumToStringElements : uint8
    {
        Element_0 UMETA(DisplayName = "要素1"),
        Element_1 UMETA(DisplayName = "要素2"),
    };
    

    이 경우 '요소 1'과 '요소 2'가 표시 이름입니다.
    만약 아래와 같이 메타데이터로 "DisplayName"을 지정하지 않은 경우…

    c++
    UENUM(BlueprintType)
    enum class EEnumToStringElements2 : uint8
    {
        Element_0,
        Element_1,
    };
    

    이 경우 "Element 1"과 "Element 2"가 표시 이름입니다.
    ( "언더 바"가 "반각 공간"으로 대체되기 때문에.)

    덧붙여서, 이것을 PrintString 로 표시하면(자) 이와 같이 됩니다.


    이것을 패키지로 보면 ...?



    언뜻 보면 아무런 문제가없는 것처럼 보이지만 패키지로 보면 어떨까요?

    실은 이렇게 됩니다.


    보시다시피, 둘 다 기호 이름이되었습니다.
    그래서, 반드시 표시명이 돌려주어진다고 생각해 처리를 짜고 있으면, 패키지화했을 때에 아픈 눈을 보게 되므로, 주의할 필요가 있습니다.

    BP로 열거형을 정의해 보면…?



    다만, 이것은 열거형이 C++ 로 정의되고 있는 경우입니다. BP 로 정의된 열거형의 경우는 또한 거동이 다릅니다.

    시험에 다음과 같은 열거형을 BP로 만들어 보았습니다.

    이것을 PrintString 로 표시해 보아 어떻게 되었는가라고 하면, 이렇게 되었습니다.

    이 대로, 이쪽의 경우는 패키지에서도 문제 없게 표시명을 취득할 수 있었습니다.

    이 노드를 사용하고 싶을 때는 ...?



    다음과 같은 상황이 가정됩니다.
  • 디버그 표시로 열거형의 이름을 표시하고 싶다.
  • 기호 이름을 사용하고 싶습니다.

  • 전자에 대해서는, DisplayName 미사용으로, 한편, 심볼명만 알면 좋은 경우이면, 이 노드를 사용해 표시명을 취득해도 그다지 문제가 없는 것 같습니다.
    반대로 DisplayName 를 사용하고 있거나 , 또는 DisplayName 로 지정한 다른 캐릭터 라인을 사용하고 싶은 경우는 DisplyaName 의 캐릭터 라인을 사용하지 않고, 별도 준비한 캐릭터 라인을 사용하는 구조를 준비하는 편이 무난하게 생각됩니다.

    후자에 관해서는, UEnum::GetNameStringByValue 를 사용한 함수나 이것을 이용한 K2_Node 를 준비하는 것으로 대응할 수 있을 것입니다만, 무거운 이야기가 될 것 같기 때문에 별도 검증이 필요할 것 같습니다.

    좋은 웹페이지 즐겨찾기