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