【幻エンジン】UE 4仮想アーキテクチャの属性データ型

4489 ワード

本文は以下の文書を参考にして個人の実践と結びつけて整理したものである.
  • 幻のアーキテクチャ-属性-コアデータ型*このセクションのデータ型に関する部分は中国語の翻訳がなく、これによって記録されます.*
  • UE 4のC++プログラミングの説明-数値タイプ、文字列、コンテナ
  • 属性宣言(Property Declaration)
    属性変数は、標準C++変数構文宣言を使用し、UPROPERTYマクロを使用して属性宣言タグを行います.
    UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
    Type VariableName;
    

    コアデータ型(Core Data Type)
    せいけい
    ユーザ機器UE 4は、short、int、longなどのプラットフォームベースタイプによってサイズが異なるため、代替品として使用できる「int」または「uint」、後続サイズ[ビット単位])を提供します.
    を選択します.
    説明
    uint8
    8ビット符号なし
    uint16
    16ビット符号なし
    uint32
    32ビット符号なし
    uint64
    64ビット符号なし
    int8
    8ビット符号付き
    int16
    16ビット符号付き
    int32
    32ビット符号付き
    int64
    64ビット符号付き
  • 幻エンジンには、数値タイプがサポートする最小および最大の範囲を見つけるテンプレートTnumericLimitsがあります.
  • このデータ型のサイズは、コンパイラに基づいて決定する必要があるため、移植可能なコードではC++整数を使用しないでください.
  • の数値タイプはNumericLimitsである.hで宣言し、クエリーを詳しく読むことができます.

  • Bitmasks
    整数タイプのプロパティは、ビットマスクとしてエディタに露出できます.整数属性をビットマスクとしてマークするには、次のように要素セグメントにbitmaskを追加します.
    UPROPERTY(EditAnywhere, Meta = (Bitmask))
    int32 BasicBits;
    

    このメタタグを追加すると、エディタに表示される汎用ネーミングフラグ(「Flag 1」,「Flag 2」...「Flag 32」)のドロップダウンリストが表示されます.
    bitflagsの名前をカスタマイズするには、まず「bitflags」メタタグを使用してUNUMを作成する必要があります.
    UENUM(BlueprintType, Meta = (Bitflags))
    enum class EColorBits
    {
        ECB_Red,
        ECB_Green,
        ECB_Blue
    };
    

    このUNUMを作成した後、次のように「BitmaskEnum」メタラベルを使用して参照できます.
    UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
    int32 ColorFlags;
    

    このように調整すると、ドロップダウン・ボックスにリストされたビット・フラグには、クラス・エントリの名前と値が列挙されます.この例ではECB_Redは値0であり、当選時にビット0がアクティブになることを意味する(ColorFlagsに1を追加).ECB_Greenはビット1に対応する(ColorFlagsに2を加算する).ECB_Blueはビット2に対応します(ColorFlagsに4を追加します).
  • 列挙タイプは32個以上のエントリを含むことができるが、最初の32個の値のみが属性エディタUIのビットマスク関連付けで表示される.
  • と同様に、明示的値エントリが受け入れられる場合、0と31の間に明示的値がないエントリはドロップダウンに含まれない.

  • 浮動小数点の種類
    幻は標準のC++浮動小数点タイプ、float(32-bit)とdouble(64-bit)を使用します.
    float num_f = 1.0f;
    double num_d = 1.0;
    

    Boolean型
    ブールタイプは、C++boolキーワードまたはビットドメインとして表すことができます.
    uint32 bIsHungry : 1;
    bool bIsThirsty;
    
  • ビットドメインは、UPROPERTYタグがないとコンパイルが間違っているため、UE 4特有であるべきであることを示しています.

  • 文字列
    FString
    FStringはstd::stringに似た可変文字列であり、文字列を簡単に使用するのに便利な多くの方法があります.TEXT()マクロを使用して、FStringを新規作成します.
    FString MyStr = TEXT("Hello, Unreal 4!").
    

    FText
    FTextはFStringと似ていますが、テキストをローカライズするために使用されます.NSLOCTEXTマクロを使用して、デフォルト言語のネーミングスペース、キー、および数値を持つFTextを新規作成します.
    FText MyText = NSLOCTEXT("Game UI", "Health Warning Message", "Low Health!")
    

    LOCTEXTマクロも使用できます.各ファイルにネーミングスペースを1回定義するだけで、ファイルの下部で定義がキャンセルされることを確認できます.
    //   GameUI.cpp  
    #define LOCTEXT_NAMESPACE "Game UI"
    
    //...
    FText MyText = LOCTEXT("Health Warning Message", "Low Health!")
    //...
    
    #undef LOCTEXT_NAMESPACE
    //     
    

    FName
    FNameは、頻繁に繰り返される文字列を識別子として保存し、比較時にメモリとCPUの時間を節約します.FNameは、完全な文字列を参照する各オブジェクト間で複数回保存するのではなく、所与の文字列にマッピングされた小さなストレージスペースインデックスを使用します.これにより、文字列の内容が一度に保存され、文字列が複数のオブジェクト間で使用される場合にメモリが節約されます.Name Aを確認IndexがName Bに等しいかどうかIndexは、2つの文字列をすばやく比較し、文字列内の各文字の同等性チェックを回避します.
    コーディングの実践
    [CoreDataTest.h]
    void TestData();
    
    #pragma region  Test bitmask
        UPROPERTY(EditAnywhere, Meta = (Bitmask))
            int32 BasicBits;
        UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
            int32 ColorFlags;
    #pragma endregion
    
    #pragma region Boolean
        //    UE4    ,  UPROPERTY         
        UPROPERTY()
            uint32 bSimGravityDisabled : 1;
    #pragma endregion   
    
    [CoreDataTest.cpp]
    //               
    //             ,    UPROPERTY
    void ACoreDataTest::TestData()
    {
        // Integers
        uint8 num_u8 = 8;
        uint16 num_u16 = -16;
        uint32 num_u32 = 32;
        uint64 num_u64 = 64;
    
        int8 num_i8 = 8;
        int16 num_i16 = 16;
        int32 num_i32 = 32;
        int64 num_i64 = 64;
    
        // Float
        float num_f = 1.0f;
        double num_d = 1.0;
    
        // Boolean
        bool bIsThirsty = false;
    
        //String
        FString fstr = TEXT("Hello, UrealEngine 4!");
        FText ftext_ns = NSLOCTEXT("Game UI", "Health Waring Message", "Low Health!");
    
    #define LOCTEXT_NAMESPACE "Game UI"
        FText ftext = LOCTEXT("Health Warning Message", "Low Health");
    #undef LOCTEXT_NAMESPACE
    
        // FName 
        //        ,        
    }