[UE4]自定義結構體、類、數據表


自定義數據表:

#pragma once

#include "CoreMinimal.h"
#include "Engine/UserDefinedStruct.h"
#include "Components/CanvasPanel.h"
#include "Blueprint/UserWidget.h"
#include "Runtime/Engine/Classes/Engine/UserDefinedStruct.h"
#include "Runtime/Engine/Classes/Engine/DataTable.h"
#include "Runtime/CoreUObject/Public/UObject/ObjectMacros.h"

#include "MiniMapFlagData.generated.h"


/*BlueprintType:暴露成為藍圖數據類型,藍圖變量可以使用該結構體作為數據類型*/
USTRUCT(BlueprintType)
struct FUMiniMapFlagDataC : public FTableRowBase
{
    GENERATED_USTRUCT_BODY()

    //小圖標
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        UUserWidget* flag;

    //小圖標對應的Actor
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        AActor* Actor;

    //小圖標對應的Canvas panel Slot
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        UCanvasPanelSlot* Slot;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        int MyAge;
};

成員變量添加UPROPERTY標簽,可以享受到UE4垃圾自動管理機制,不用手動釋放變量內存。

自定義類

#pragma once

#include "CoreMinimal.h"
#include "Engine/UserDefinedStruct.h"
#include "Components/CanvasPanel.h"
#include "Blueprint/UserWidget.h"
#include "Runtime/Engine/Classes/Engine/UserDefinedStruct.h"
#include "Runtime/Engine/Classes/Engine/DataTable.h"
#include "Runtime/CoreUObject/Public/UObject/ObjectMacros.h"

#include "MiniMapFlagData.generated.h"

/**
*
*/
UCLASS(BlueprintType)
class PROJ10_0121_API UMiniMapFlagData : public UUserDefinedStruct
{
    GENERATED_BODY()

public:
    UMiniMapFlagData() {}
    UMiniMapFlagData(UUserWidget* flag, AActor* Actor, UCanvasPanelSlot* Slot)
        :flag(flag), Actor(Actor), Slot(Slot)
    {}
    /*
        flag(flag)表示將參數flag賦值給成員參數flag
        使用方法:UMiniMapFlagData data(flag,Actor,Slot);
    */

public:
    //小圖標
    UPROPERTY()
        UUserWidget* flag;

    //小圖標對應的Actor
    UPROPERTY()
        AActor* Actor;

    //小圖標對應的Canvas panel Slot
    UPROPERTY()
        UCanvasPanelSlot* Slot;

    UPROPERTY()
        int MyAge;

};

 

自定義函數添加說明文字,可在藍圖中顯示,如果要支持中文,則只要把h和cpp文件以utf-8編碼保存就可以了。

注意:EditAnywhere,BlueprintReadWrite等等修飾符不能拼寫錯誤,拼寫錯誤是不會有錯誤提示的,並且編譯出錯信息也不會告訴我們是修飾符寫錯了,只會說編譯出錯,沒有詳細的出錯信息。

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/CanvasPanel.h"
#include "MiniMap/MiniMapFlagData.h"

#include "StaticMiniMapBase.generated.h"

/**
 * 
 */
UCLASS()
class PROJ10_0121_API UStaticMiniMapBase : public UUserWidget
{
    GENERATED_BODY()

protected:
    UPROPERTY(EditAnywhere,BlueprintReadWrite, Category=myMethods,meta=(ToolTip="小圖標容器面板"))
        UCanvasPanel * PanelFlag;
     
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = myMethods,meta=(ToolTip="存放小圖標數據機構數組"))
        TArray<UMiniMapFlagData*> ArrayFlag;
    //TArray<TSubclassOf<class UMiniMapFlagData>> FlagArray;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = myVariables,meta=(ToolTip="小地圖比例尺"))
        float RatioMap;
    
protected:
    UFUNCTION(BlueprintCallable, Category = myMethods,meta=(ToolTip="初始化UI控件對象"))
        void ini(UCanvasPanel* sFlagPanel);

public:
    UFUNCTION(BlueprintCallable, Category = myMethods,meta=(ToolTip="添加圖標到小地圖"))
    void Add_Flag(UUserWidget* flag, AActor* actor);
    
};

 

ArrayFlag是在C++定義的函數,可以在藍圖中顯示中文說明文字。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM