【UE5转载】新手如何由蓝图转C++

对于没怎么接触过C++或者C++用的不熟练的新手来讲,建议先从蓝图功能转为C++功能做起.

下面举个例子:

1.找到一个蓝图用的熟练的节点:

比如用的比较多的GetAllActorsOfClass这个蓝图节点:
在这里插入图片描述
2.找到这个蓝图节点的C++实现:

通过上图标记部位可以看到,该蓝图节点的C++实现在名为GameplayStatics 这个模块中.

那么问题来了:如何在源码中找到这个模块?

答:在解决方案资源管理器中输入"GameplayStatics.h"
在这里插入图片描述
双击打开GameplayStatics.h,在这个文件中按Ctrl+F搜索GetAllActorsOfClass
在这里插入图片描述
3.找到之后先阅读函数说明以及参数列表说明:

对照下面两张图,分别是这个函数的C++和蓝图,入门时,一定要对照蓝图来写C++,这样便于理解蓝图和C++的关系!
在这里插入图片描述
在这里插入图片描述
4.正式在C++中尝试书写代码:

(1)创建一个Actor类,我们选择在Actor的beginplay中使用GetAllActorsofClass来获取某个类型的所有Actor

(2)输入UGameplayStatics后发现报错并显示下图错误:
在这里插入图片描述
这是因为没有导入.h文件导致识别不了这个类型

(3)导入GameplayStatics.h

在刚才找到的GameplayStatics.h上右键,选择复制完整路径
这是因为没有导入.h文件导致识别不了这个类型

在这里插入图片描述
然后来到创建的Actor.cpp文件中,在上面输入#include “刚才复制的完整路径”,如下图:
在这里插入图片描述
双引号内只保留Runtime以及之后的内容,然后将"“换成”/",如下图:
在这里插入图片描述
这样头文件就导入完成了

4.GetAllActorsOfClass是一个静态函数,所以使用类名::函数名来调用
在这里插入图片描述
5.根据提示,我们需要输入3个参数:

(1)WorldContextObject:世界上下文对象,用于获取当前世界(关卡/level),其目的在于告知引擎我们需要从哪个关卡中获取所有的指定类型Actor

这个参数一般遇到之后可以传入GetWorld(),指定当前的世界.

(2)ActorsClass:想要获得的Actor的类型,该参数需要输入一个类型,我们在这假设想要获取关卡中所有的Pawn,那我们在这传入APawn::StaticClass().

假设你想查找自己创建的Actor类型B,那么也可以输入B::StaticClass().

这里要注意,只有C++创建的类型才能够直接用类名::StaticClass()获得类型.

如过想要在C++中查找蓝图创建的Actor,需要使用LoadClass先把蓝图类加载进来才可以,LoadClass后续再讲.

(3)OutActors:用来接收查找到的多个Actor,所以是Actor数组,在这里我们创建一个局部变量TArray<AActor>OutActors;然后传入即可.

注意,数组类型必须是AActor*!

代码如下:

TArray<AActor*>OutActors; UGameplayStatics::GetAllActorsOfClass(GetWorld(),APawn::StaticClass(),OutActors);

for(int i=0;i<OutActors.Num();i++)

{

//输出所有Actor的名字 

UE_LOG(LogTemp,Log,TEXT("Actor's Name:%s"),*OutActors[i]->GetName()); 

}

以上就是使用C++实现蓝图节点的详细流程,蓝图转C++需要掌握的很重要的一点就是读懂C++函数的注释和参数列表说明,这点掌握了,就能大体知道如何调用C++函数来实现功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值