虚幻引擎 Get Hit Result Under Cursor 节点

在虚幻引擎5(UE5)中,Get Hit Result Under Cursor 是一个非常实用的节点,用于实现鼠标与3D世界的交互。它通过从摄像机向鼠标光标位置发射一条射线,来检测与场景中物体的碰撞

这个功能主要通过以下两个节点实现:

  • Get Hit Result Under Cursor by Channel:通过指定的碰撞通道(Trace Channel) 进行检测

  • Get Hit Result Under Cursor for Objects:检测指定的对象类型(Object Types) 列表

下面是一个从零开始的完整操作步骤,带你实现鼠标点击物体并显示其信息的功能。

🛠️ 1. 准备工作:显示鼠标光标

在UE中,游戏默认可能不显示鼠标光标,因此第一步是将其显示出来。

  1. 打开你的关卡蓝图(Level Blueprint)

  2. 在蓝图的事件图表中,右键点击,搜索并添加 Event BeginPlay 节点(游戏开始时触发)。

  3. 从 Event BeginPlay 节点拖出引线,搜索并添加 Get Player Controller 节点,目标(Target)选择 Self

  4. 从 Get Player Controller 节点拖出引线,搜索并添加 Set Show Mouse Cursor 节点。

  5. 将 Set Show Mouse Cursor 节点的 Show Mouse Cursor 参数勾选为 true

✨ 2. 核心逻辑:点击物体并打印信息

接下来,我们将实现当鼠标左键点击场景中的物体时,在屏幕上打印出被点击物体的名称和击中点的世界坐标。

  1. 在关卡蓝图的事件图表中,右键点击,搜索并添加 InputAction 或 InputKey 事件,这里选择 Left Mouse Button 作为触发事件

  2. 从鼠标点击事件节点拖出引线,搜索并添加 Get Player Controller 节点。

  3. 从 Get Player Controller 节点拖出引线,搜索并添加 Get Hit Result Under Cursor by Channel 节点

  4. 配置节点参数

    • Trace Channel (追踪通道):选择 Visibility 或 Camera。这需要与你场景中物体的碰撞设置匹配

    • Trace Complex (复杂追踪):通常保持 false,使用简化的碰撞体进行检测,性能更好

  5. 处理检测结果Get Hit Result Under Cursor by Channel 节点会返回一个布尔值(Return Value),表示是否击中了任何物体

    • 从 Return Value 拖出引线,添加一个 Branch 节点。

    • 如果为 True(表示击中了物体),则从 Branch 节点的 True 执行引脚拖出引线。

  6. 解析命中结果:从 Get Hit Result Under Cursor by Channel 节点的 Hit Result 输出引脚拖出引线,搜索并添加 Break Hit Result 节点。这个节点会将复杂的结构体拆解为单个变量。

  7. 打印信息

    • 从 Break Hit Result 节点的 Hit Actor 输出引脚,再拖出引线,搜索并添加 Get Display Name 节点,以获取Actor的名称。

    • 从 Break Hit Result 节点的 Location 输出引脚,可以直接获得世界坐标。

    • 最后,将 Get Display Name 和 Location 连接到 Print String 节点,用于在屏幕上输出信息

💡 3. 进阶用法与技巧

  • 检测对象类型:如果你只想检测特定类型的物体(如静态网格体),可以使用 Get Hit Result Under Cursor for Objects 节点,并在其 Object Types 数组中添加你感兴趣的类型

  • 鼠标悬停检测:将触发事件从 Left Mouse Button 替换为 Event Tick,并配合 Is Hovered 或类似逻辑,即可实现鼠标悬停高亮的效果

  • 必不可少的有效性检查:在 Branch 节点判断为 True 后,建议再添加一个 Is Valid 节点来检查 Hit Actor 是否有效,这可以防止因检测到无效对象而导致的游戏报错

  • 获取更精确的撞击点Break Hit Result 节点中的 Impact Point 和 Location 通常非常接近,但在某些情况下(如检测复杂碰撞),Impact Point 可能更精确

⚠️ 4. 常见问题排查

  • 无法检测到物体:最常见的原因是碰撞设置不正确。请确保:

    1. 被点击物体的碰撞预设(Collision Preset)允许 Visibility 或 Camera 通道的射线检测,并且响应设置为 “Block” 

    2. 物体不能是“隐藏”或“不可见”状态。

  • 检测到天空球(Skybox):如果鼠标没有点击到任何物体,射线可能会击中背景的天空球。解决方案是在 Branch 节点后,额外检查击中的Actor是否是你期望的类型

  • 鼠标点击UI时也触发了3D检测:如果想避免这种情况,需要在点击UI时让鼠标事件不被传递到3D场景,这通常涉及到UI(UMG)的 Hit Test Invisible 等设置

💎 总结

通过以上步骤,你可以在UE5中成功实现基础的鼠标拾取功能。掌握 Get Hit Result Under Cursor 节点是构建鼠标交互式游戏(如RTS、点击冒险等)的重要基础。

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容