GetOverlapping Actors 节点用于获取与当前Actor(或其指定组件)发生重叠的所有其他Actor的列表。它不会返回自身。
下面是在虚幻引擎5中使用该节点的两种主要方法:蓝图和C++。
🟦 蓝图中的使用步骤
-
准备场景
-
在关卡中放置一个用于检测的Actor(例如,一个立方体或球体),确保它有一个碰撞组件(如
Box Collision)。 -
将该碰撞组件的碰撞预设设置为能产生重叠事件的模式,例如
OverlapAll或Custom并启用重叠。
-
-
构建蓝图逻辑
-
打开该Actor的蓝图,在事件图表中,从自身或具体的碰撞组件引用上拖出引线。
-
在搜索框中输入
Get Overlapping Actors并选择该节点。
-
-
配置节点参数
-
Target:此引脚已自动连接,代表进行检测的Actor或其组件。
-
Class Filter(可选):这是一个非常有用的过滤功能。如果你只关心特定类型的Actor(例如,只关心
BP_Enemy),可以在这里指定。这样返回的数组里就只有该类型或其子类的Actor了。
-
-
处理结果
-
节点的输出引脚
Overlapping Actors是一个数组,包含了所有符合条件的Actor。 -
你需要使用
For Each Loop等节点来遍历这个数组,并对每个找到的Actor执行你的游戏逻辑(如打印信息、应用伤害、触发事件等)。
-
💻 C++ 中的使用步骤
-
包含头文件:在需要使用该函数的类的
.cpp文件中,包含GameFramework/Actor.h。#include "GameFramework/Actor.h" -
调用函数:在你的函数中,通过Actor或PrimitiveComponent的实例来调用
GetOverlappingActors。-
通过Actor调用:获取与该Actor任何组件重叠的其他Actor。
// 假设 this 是一个 AActor 指针 TArray<AActor*> OverlappingActors; this->GetOverlappingActors(OverlappingActors);
-
通过组件调用:获取与特定组件(如一个碰撞体)重叠的Actor。
// 假设 MyCollisionComponent 是一个 UPrimitiveComponent 指针 TArray<AActor*> OverlappingActors; MyCollisionComponent->GetOverlappingActors(OverlappingActors);
-
-
使用类过滤器(可选):两个重载函数都接受一个
TSubclassOf<AActor>类型的参数作为过滤器。TArray<AActor*> OverlappingEnemies; // 只获取 BP_Enemy 类型的Actor this->GetOverlappingActors(OverlappingEnemies, ABP_Enemy::StaticClass());
-
处理结果:函数执行后,结果会填充到传入的
TArray中,你可以像处理普通数组一样遍历它。for (AActor* Actor : OverlappingActors) { if (Actor) { // 对每个重叠的Actor执行操作 UE_LOG(LogTemp, Warning, TEXT("Overlapping with: %s"), *Actor->GetName()); } }
⚠️ 常见问题与注意事项
-
何时使用? 此节点非常适合在
BeginPlay时检查哪些Actor已经在世界中重叠,或在任意时刻进行“快照”式查询。 -
与事件的区别:
OnComponentBeginOverlap和OnComponentEndOverlap是事件,用于响应重叠状态的变化(如Actor进入或离开触发器)。而GetOverlapping Actors是一个函数,用于获取某一瞬间的状态。 -
碰撞设置:
GetOverlapping Actors能否检测到Actor,完全取决于碰撞组件的设置。请确保双方的碰撞预设都允许产生重叠事件(Generate Overlap Events为 true)。 -
性能考虑:在
Tick事件中每帧调用此函数可能会带来性能开销。请根据实际需求,考虑使用事件驱动的方式或在必要时才进行调用。 -
数组为空:如果节点返回空数组,首先检查碰撞组件是否正确设置并启用,然后确认
Class Filter参数是否设置正确。
💎 总结
Get Overlapping Actors 是一个强大且灵活的工具,可以帮你随时获取场景中的重叠信息。
-
蓝图 实现直观,适合快速原型设计和逻辑搭建。
-
C++ 实现则提供了更高的性能和更精细的控制。
核心在于理解它是一个“快照”函数,而非持续性的事件监听。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容