我是靠谱客的博主 羞涩八宝粥,这篇文章主要介绍最简单的 UE 4 C++ 教程 —— 触发器体【二十二】,现在分享给大家,希望可以做个参考。

原教程是基于 UE 4.18,我是基于 UE 4.25】

英文原地址

接上一节教程,在本教程中,当 actor 与 TriggerVolume 重叠时将触发一个事件。本教程使用了TriggerBox,但过程应该是相似的。

创建一个新的 C++ TriggerVolume 子类并将其命名为 MyTriggerVolume 。在头文件中添加OnOverlapBeginOnOverlapEnd 函数。

下面是最终的头文件。

MyTriggerVolume.h

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once #include "CoreMinimal.h" #include "Engine/TriggerVolume.h" #include "MyTriggerVolume.generated.h" /** * */ UCLASS() class UNREALCPP_API AMyTriggerVolume : public ATriggerVolume { GENERATED_BODY() protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // constructor sets default values for this actor's properties AMyTriggerVolume(); // overlap begin function UFUNCTION() void OnOverlapBegin(class AActor* OverlappedActor, class AActor* OtherActor); // overlap end function UFUNCTION() void OnOverlapEnd(class AActor* OverlappedActor, class AActor* OtherActor); };

在 .cpp 文件中,为了帮助我们可视化触发器体,我们必须 #include DrawDebugHelpers.h  文件。

复制代码
1
2
3
#include "MyTriggerVolume.h" // include draw debug helpers header file #include "DrawDebugHelpers.h"

我们也可以 #define 一些调试日志的快捷方式。

复制代码
1
2
#define print(text) if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 1.5, FColor::Green,text) #define printFString(text, fstring) if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT(text), fstring))

在 actor 的构造函数中,我们将向 OnActorBeginOverlap.AddDynamicOnActorEndOverlap.AddDynamic 注册重叠事件。

复制代码
1
2
3
4
5
6
AMyTriggerVolume::AMyTriggerVolume() { //Register Events OnActorBeginOverlap.AddDynamic(this, &AMyTriggerVolume::OnOverlapBegin); OnActorEndOverlap.AddDynamic(this, &AMyTriggerVolume::OnOverlapEnd); }

BeginPlay 上,我们将使用 DrawDebugBox 绘制调试框。

复制代码
1
2
3
4
5
6
7
void AMyTriggerVolume::BeginPlay() { Super::BeginPlay(); DrawDebugBox(GetWorld(), GetActorLocation(), GetActorScale()*100, FColor::Cyan, true, -1, 0, 5); }

接下来,我们将编写重叠函数,它将向屏幕打印一条消息,指示进入和退出 TriggerVolume 的 actor 。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void AMyTriggerVolume::OnOverlapBegin(class AActor* OverlappedActor, class AActor* OtherActor) { if (OtherActor && (OtherActor != this)) { // print to screen using above defined method when actor enters trigger volume print("Overlap Begin"); printFString("Other Actor = %s", *OtherActor->GetName()); } } void AMyTriggerVolume::OnOverlapEnd(class AActor* OverlappedActor, class AActor* OtherActor) { if (OtherActor && (OtherActor != this)) { // print to screen using above defined method when actor leaves trigger volume print("Overlap Ended"); printFString("%s has left the Trigger Volume", *OtherActor->GetName()); } }

编译代码。将新 actor 拖放到游戏中。

 

按下播放按钮,并进进出出触发器体。

下面是最后运行的效果图

 

 

最后

以上就是羞涩八宝粥最近收集整理的关于最简单的 UE 4 C++ 教程 —— 触发器体【二十二】的全部内容,更多相关最简单的内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部