UE学习笔记第二天(一些宏定义)

今天学习的是在UE当中的一些基础类型(太简单的就没有在下文提到,可以去官方文档查看)

(其实博主也学得有点累了,博客最近可能写得没有暑假好了,但是能够讲究看。):

下文包含的类型有:

TSet:(一个不太注重排序的一个容器,但是它自身有很多函数可以调用,使TSet变得很灵活);

UPROPERTY:()UE的类宏定义属性说明符和元数据说明符号;

UFUNCTION():UE函数宏定义属性说明符和元数据说明符号;

1.TSet

在使用这个容器的时候,需要注意是否注重排序,如果注重推荐使用队列。

TSet是一种快速容器,通常用于存储排序不重要的元素
TSet的键值就是元素本身,可以实现覆盖等操作,数据值和键值并不独立
由于以上特性,TSet可以很快的添加,查找,删除,TSet是一种值类型,可以支持一些常规操作,比如(=)

我们下面创建一个以string类型的TSet

TSet<FStirng> Myset;

然后是添加

Myset.Add(TEXT("Bnana"));
Myset.Add(TEXT("Grapefruit"));
Myset.Add(TEXT("Pineapple"));
Myset.Emplace(TEXT("Orange"));

在上面的代码中Add和Emplace都是是添加一个,但是Emplace可以避免创建临时文件,所以一般情况下就是使用emplace添加。

如果你有两个set,你想要将他们合并的话可以使用append将他们合并
比如你除了上面的set你还有一个set2
你想要将其合并在一起就可以
set.append(set2);

接下来是删除

TSet有下面三种可以达到删除的目的:

Remove();		//返回已删除的元素数量,如果给定的元素已经删除,会返回0来表示没有删除
Reset();		//清空集合元素,但是不会清空内存
Empty();		//清空集合元素,也会清空内存

然后是查找

Num();		//会查询集合中保存的元素数量
Contains();		//查询是否包含特定函数,找到为真,反之为假
find();		//返回指向元素的指针,找不到就会返回nullptr

然后是一些特殊用处的函数如Array函数:

例如:
TArray<FString> testArray=Myset.Array();
这样就可以把TSet转换为testArray了

TSet还可以排序:
TSet<FString> TESTset={TEXT("A"),TEXT("AA"),TEXT("AAA")};
TESTset.Sort([](FString A,FStringB){return A.Len()>B.Len()});

前面也提到set可以用=符号,我们就可以把一个有元素的set赋值给一个没有元素的set
TSet<FString> testSet=TESTset;

以及set可以用[]像数组那样获得对应的引用

FSetElementId Index=NewSet.Add(TEXT("TwoTwo"));
TESTset[index]=TEXT("one");

Resever可以用来预先分配内存
TSet<FString> testSET;
testSet.Resever(10); 
       //如果输入的元素少于分配的元素会产生闲置内存,浪费空间


既然有产生闲置内存的,那么一定就会有删除这个的(因为有闲置内存是缺点)
Strik

比如TESTset有闲置内存

TESTset.Strik();        //就可以删除掉末端的闲置内存

但是一般情况下,闲置内存并不是只存在于末尾,我们就可以把闲置的内存全部放在后面,然后删除掉

就可以使用Compact();//

TESTset.Compact();
TESTest.Strik();

这样就可以全部删除掉了 

但是Compact可能会打乱顺序,我们可以使用CompactStable来确保顺序不会改变

///

2.UPROPERTY宏,属性说明符元数据说明符

一边学习一边写笔记好累都看到这里了,博主请求你给给点赞吧T_T;

UPROPERTY宏通过反射把属性(变量或者方法)显现在蓝图当中,在蓝图中编辑,使其更加方便。宏这个定义就是为了使编程更加方便,因为宏大多是一些需要记住的东西,(虽然计算机行业可以直接查文档)所以就直接C+V我写在项目当中的东西了(这些需要记住东西多加练习也就会了

UPROPERTY(VisibleDefaultsOnly)        
int32 VisibleDefaultsOnlyInt;                //仅在类里面可见
UPROPERTY(VisibleInstanceOnly)
FString VisibleInstanceOnlystring;        //仅在实例化细节面板可见
UPROPERTY(VisibleAnywhere);    
FVector VisibleAnywhereVector;            //上面两种方法的地方都可见

UPROPERTY(EditDefaultsOnly)
int32 EditDefaultsOnlyInt;                //仅在类里面可见
UPROPERTY(EditInstanceOnly)
FString EditInstanceOnlystring;        //仅在实例化细节面板可见
UPROPERTY(EditAnywhere);
FVector EditAnywhereVector;            //上面两种方法的地方都可见

UPROPERTY(EditAnywhere, BlueprintReadOnly);    //这里需要加上空格
FVector EditAnywhereVector1;            //上面两种方法的地方都可见,只可以在蓝图中读
UPROPERTY(EditAnywhere, BlueprintReadWrite);    //同上
FVector EditAnywhereVector2;            //上面两种方法的地方都可见,蓝图中可见可写
UPROPERTY(VisibleDefaultsOnly)        
int32 VisibleDefaultsOnlyInt;                //仅在类里面可见
UPROPERTY(VisibleInstanceOnly)
FString VisibleInstanceOnlystring;        //仅在实例化细节面板可见
UPROPERTY(VisibleAnywhere);    
FVector VisibleAnywhereVector;            //上面两种方法的地方都可见

UPROPERTY(EditDefaultsOnly)
int32 EditDefaultsOnlyInt;                //仅在类里面可见
UPROPERTY(EditInstanceOnly)
FString EditInstanceOnlystring;        //仅在实例化细节面板可见
UPROPERTY(EditAnywhere);
FVector EditAnywhereVector;            //上面两种方法的地方都可见

UPROPERTY(EditAnywhere, BlueprintReadOnly);    //这里需要加上空格
FVector EditAnywhereVector1;            //上面两种方法的地方都可见,只可以在蓝图中读
UPROPERTY(EditAnywhere, BlueprintReadWrite);    //同上
FVector EditAnywhereVector2;            //上面两种方法的地方都可见,蓝图中可见可写
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "VALUE"))
int32 Valuex;    //替换名称

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "Controller"));
bool isController;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "isController"))        //和上面的结合起来之后就可以通过状态来使对应的值可不可以修改
float value3;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ToolTip="isContorller"))        //解释说明我们的变量
bool isTrue;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "VALUE"))
int32 Valuex;    //替换名称

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "Controller"));
bool isController;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "isController"))        //和上面的结合起来之后就可以通过状态来使对应的值可不可以修改
float value3;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ToolTip="isContorller"))        //解释说明我们的变量
bool isTrue;

在设置这些东西过后,好像没有事件(函数)?由此可以猜想到,ue要用到很多动作,那么ue一定也离不开function
下面就是function的宏定义

有返回值为函数,无返回值为事件

UFUNCTION(BlueprintImplementableEvent,)        //在C++中声明,在蓝图中实现
void Function();        

UFUNCTION(BlueprintNativeEvent)        //在C++中声明和实现,蓝图课重载可不重载
void Function1();    

不过在这些之外还有内联函数,结构体,枚举的宏定义这些对于初学者不是经常用到,就在这里不展开描述,如果后面有需要,在后面的文章进行补充

暂时打算停更一段时间,优先完成课设保证课设质量,后面会回来修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值