[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++定义的函数,可以在蓝图中显示中文说明文字。

原文地址:https://www.cnblogs.com/timy/p/10066118.html

时间: 2024-08-12 22:55:56

[UE4]自定义结构体、类、数据表的相关文章

qsettings 保存自定义结构体(QVariant与自定义结构体相互转化)

参考博文:QVariant与自定义数据类型转换的方法. 这里摘取其关键内容: 1.将自定义数据类型使用Q_DECLARE_METATYPE宏进行声明,便于编译器识别. 2.在插入对象的时候,声明QVariant对象,使用其setValue方法添加自定义对象. 3.在读取的时候,采用QVariant对象的value方法返回自定义对象. 写入: //类型转换 QVariant v; v.setValue(MyStruct);  读取: //转换为自定义的结构体实例 MyStruct s = v.va

自定义结构或类的比较

存放在数组或vector中的排序: 定义普通函数: 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 struct act{ 5 int num; 6 int s; 7 int e; 8 }; 9 bool lessact(const act& a1,const act &a2){ 10 return a1.e<a2.e; 11 } 12 int main() { 13

JS自定义结构体数组

废话不多说,直接上代码 <script>    var s_keySearch = {      key_name:Array(),      key_index:Array(),      key_count:Array(),      key_scount:Array()   };    for(i=0;i<3;i++){;   s_keySearch.key_name[i]="内衣"+i;   s_keySearch.key_index[i]= i;   s_k

stl容器之--自定义结构体作为stl容器元素成员的使用

自定义结构体作为stl容器元素成员的设计要求之一是:在对待自定义类型时和内置类型必须是一致的,甚至自定义类型的支持更好. <C++标准程序库>: set和multiset set和multiset会根据特定的排序准则,自动将元素排序.两者不同在于multiset允许重复而set不允许. 只要是assignable.copyable.comparable(根据某个排序准则)的型别T,都可以成为set或multiset的元素型别.没有传入特别排序准则,就采用缺省准则less(这是一个仿函数,以op

typedef 和 自定义结构体类型

在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列. 1 /*定义单链表结点类型*/ 2 3 typedef char ElemType; 4 5 typedef struct dNode {//声明单链表结点类型 6 7 ElemType data; 8 9 struct dNode *next; //指针域 }LNode, *LinkList; //定义此结构体变量stru

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左到右对应0,1,2,3 enum CompassPoint { case North case South case East case West //enum中可以定义方法 func show(){ print(self) } } //定义enum 变量 var p = CompassPoint.Nor

QT:用QSet储存自定义结构体的问题——QSet和STL的set是有本质区别的,QSet是基于哈希算法的,要求提供自定义==和qHash函数

前几天要用QSet作为储存一个自定义的结构体(就像下面这个程序一样),结果死活不成功... 后来还跑到论坛上问人了,丢脸丢大了... 事先说明:以下这个例子是错误的 [cpp] view plaincopyprint? #include <QtCore> struct node { int cx, cy; bool operator < (const node &b) const { return cx < b.cx; } }; int main(int argc, cha

C结构体中数据的内存对齐问题

转自:http://www.cnblogs.com/qwcbeyond/archive/2012/05/08/2490897.html 32位机一般默认4字节对齐(32位机机器字长4字节),64位机一般默认8字节对齐(64位机机器字长8字节) 1.先看下面的例子:struct A{   char c1;   int i;   short s;   int j;}a; struct B{   int i;   int j;     short s;   char c1;}b; 结构A没有遵守字节对