对于没怎么接触过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++函数来实现功能