UEC编程方略3场景对象和属性查

咱们将紧接着上一次的体例,在Aclass03GameModeBase类中做一些也许的职掌(注:前文中为class02GameModeBase类,咱们这边假使本身在第3小节曾经从新创立了一个UE/C++工程,而且通盘的类名都改成了class03前缀,下文皆同)。前文中的InitGame()虚函数是AGameModeBase类的成员函数,而AGameModeBase承受自AActor。在Unreal之中,AActor也许以为是场景中存在的通盘目标类别的基类。它供给了更多的虚函数供咱们誊写和完成本身的需求,在后文中咱们也会逐步运用到。

当咱们经过C++编程的方法去经管一个三维场景的时分,咱们火急需求做的第一件事,即是懂得本身的场景中都存在甚么类别的目标,以及它们都有甚么样的属性。在Unreal编纂器中,这是分外浅显的事宜,由于右边的场景列表曾经给出了暂时场景中已有的目标讯息(假使你在创立项目时选中了StarterKit的话)。然则在VSIDE的代码窗口里,咱们无从猎取这些体例,一定经过编写C++代码的方法到达宗旨。

在Unreal中,通盘AActor的派生类均也许直接猎取暂时场景宇宙的讯息,即经过GetWorld()函数:

virtualUWorld*GetWorld()constoverridefinal;

要猎取GetWorld()中通盘的脚色目标,也即是猎取通盘的AActor目标实例,咱们也许经过TActorIterator迭代器来完成,它来自于头文献EngineUtils.h:

在这个for轮回中,每个*itr猎取的都是一个AActor*目标,也即是暂时场景中存在的物体也许机能。咱们憧憬分外从中找到通盘的静态三维模子,以期后续也许将它的几多讯息导出,实行修正也许交换。Unreal中的静态模子目标为AStaticMeshActor类别,它来自于头文献Engine/StaticMeshActor.h。

咱们增添上头的代码为相对繁杂的气象,分辨出AStaticMeshActor目标和别的目标,而且在日记中打印出通盘找到的场景目标的称呼:

启动程序,接着启动UnrealEditor,尔后点击运转关卡,观察节制台讯息也许看到底下的体例。读者能够把节制台中打印的讯息整个复制下来,尔后和编纂器右边场景列表中的目标做逐个双应对照,看看是不是遍历到了通盘的目标。

这边要分外注重的是,Unreal在运转关卡时会主动创立一些新的目标,以下图所示。假使咱们和上一小节同样,在InitGame()中履行上头的代码的话,是无奈猎取到这些新建目标的,由于它们在这个阶段还没有生成出席景中。

假使您曾经研习过相关Unreal开辟的一些常识,那末关于这些时刻创立的目标的机能该当曾经有所相识,本文中不做赘述。关于这些目标的机能和彼此关连有更多趣味的好友,也许参看底下的组织图,它来自于Unreal官方文档(本文写稿时只找到了4.27版本的文档,不过与5.0区别不大):

文档住址为:




转载请注明:http://www.aierlanlan.com/rzgz/795.html