虚幻引擎 Get Overlapping Actors 节点

GetOverlapping Actors 节点用于获取与当前Actor(或其指定组件)发生重叠的所有其他Actor的列表。它不会返回自身

下面是在虚幻引擎5中使用该节点的两种主要方法:蓝图和C++。

🟦 蓝图中的使用步骤

  1. 准备场景

    • 在关卡中放置一个用于检测的Actor(例如,一个立方体或球体),确保它有一个碰撞组件(如Box Collision)。

    • 将该碰撞组件的碰撞预设设置为能产生重叠事件的模式,例如 OverlapAll 或 Custom 并启用重叠

  2. 构建蓝图逻辑

    • 打开该Actor的蓝图,在事件图表中,从自身具体的碰撞组件引用上拖出引线。

    • 在搜索框中输入 Get Overlapping Actors 并选择该节点

  3. 配置节点参数

    • Target:此引脚已自动连接,代表进行检测的Actor或其组件

    • Class Filter(可选):这是一个非常有用的过滤功能。如果你只关心特定类型的Actor(例如,只关心 BP_Enemy),可以在这里指定。这样返回的数组里就只有该类型或其子类的Actor了

  4. 处理结果

    • 节点的输出引脚 Overlapping Actors 是一个数组,包含了所有符合条件的Actor

    • 你需要使用 For Each Loop 等节点来遍历这个数组,并对每个找到的Actor执行你的游戏逻辑(如打印信息、应用伤害、触发事件等)。

💻 C++ 中的使用步骤

  1. 包含头文件:在需要使用该函数的类的 .cpp 文件中,包含 GameFramework/Actor.h

    cpp
    #include "GameFramework/Actor.h"
  2. 调用函数:在你的函数中,通过Actor或PrimitiveComponent的实例来调用 GetOverlappingActors

    • 通过Actor调用:获取与该Actor任何组件重叠的其他Actor

      cpp
      // 假设 this 是一个 AActor 指针
      TArray<AActor*> OverlappingActors;
      this->GetOverlappingActors(OverlappingActors);
    • 通过组件调用:获取与特定组件(如一个碰撞体)重叠的Actor

      cpp
      // 假设 MyCollisionComponent 是一个 UPrimitiveComponent 指针
      TArray<AActor*> OverlappingActors;
      MyCollisionComponent->GetOverlappingActors(OverlappingActors);
  3. 使用类过滤器(可选):两个重载函数都接受一个 TSubclassOf<AActor> 类型的参数作为过滤器

    cpp
    TArray<AActor*> OverlappingEnemies;
    // 只获取 BP_Enemy 类型的Actor
    this->GetOverlappingActors(OverlappingEnemies, ABP_Enemy::StaticClass());
  4. 处理结果:函数执行后,结果会填充到传入的 TArray 中,你可以像处理普通数组一样遍历它。

    cpp
    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++ 实现则提供了更高的性能和更精细的控制。

核心在于理解它是一个“快照”函数,而非持续性的事件监听。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容