在虚幻引擎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中,游戏默认可能不显示鼠标光标,因此第一步是将其显示出来。
-
打开你的关卡蓝图(Level Blueprint)。
-
在蓝图的事件图表中,右键点击,搜索并添加
Event BeginPlay节点(游戏开始时触发)。 -
从
Event BeginPlay节点拖出引线,搜索并添加Get Player Controller节点,目标(Target)选择Self。 -
从
Get Player Controller节点拖出引线,搜索并添加Set Show Mouse Cursor节点。 -
将
Set Show Mouse Cursor节点的Show Mouse Cursor参数勾选为true。
✨ 2. 核心逻辑:点击物体并打印信息
接下来,我们将实现当鼠标左键点击场景中的物体时,在屏幕上打印出被点击物体的名称和击中点的世界坐标。
-
在关卡蓝图的事件图表中,右键点击,搜索并添加
InputAction或InputKey事件,这里选择Left Mouse Button作为触发事件。 -
从鼠标点击事件节点拖出引线,搜索并添加
Get Player Controller节点。 -
从
Get Player Controller节点拖出引线,搜索并添加Get Hit Result Under Cursor by Channel节点。 -
配置节点参数:
-
Trace Channel(追踪通道):选择Visibility或Camera。这需要与你场景中物体的碰撞设置匹配。 -
Trace Complex(复杂追踪):通常保持false,使用简化的碰撞体进行检测,性能更好。
-
-
处理检测结果:
Get Hit Result Under Cursor by Channel节点会返回一个布尔值(Return Value),表示是否击中了任何物体。-
从
Return Value拖出引线,添加一个Branch节点。 -
如果为
True(表示击中了物体),则从Branch节点的True执行引脚拖出引线。
-
-
解析命中结果:从
Get Hit Result Under Cursor by Channel节点的Hit Result输出引脚拖出引线,搜索并添加Break Hit Result节点。这个节点会将复杂的结构体拆解为单个变量。 -
打印信息:
-
从
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. 常见问题排查
-
无法检测到物体:最常见的原因是碰撞设置不正确。请确保:
-
被点击物体的碰撞预设(Collision Preset)允许
Visibility或Camera通道的射线检测,并且响应设置为 “Block” 。 -
物体不能是“隐藏”或“不可见”状态。
-
-
检测到天空球(Skybox):如果鼠标没有点击到任何物体,射线可能会击中背景的天空球。解决方案是在
Branch节点后,额外检查击中的Actor是否是你期望的类型。 -
鼠标点击UI时也触发了3D检测:如果想避免这种情况,需要在点击UI时让鼠标事件不被传递到3D场景,这通常涉及到UI(UMG)的
Hit Test Invisible等设置。
💎 总结
通过以上步骤,你可以在UE5中成功实现基础的鼠标拾取功能。掌握 Get Hit Result Under Cursor 节点是构建鼠标交互式游戏(如RTS、点击冒险等)的重要基础。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容