1. 程式人生 > >[UE4]自定義結構體、類、數據表

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

png table 小地圖 比例 pub 地圖 sse 面板 gpa

自定義數據表:

#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++定義的函數,可以在藍圖中顯示中文說明文字。

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