Get Hit Result Under Cursor(及其变体Get Hit Result Under Cursor by Channel)是虚幻引擎5中实现鼠标与3D世界交互的核心节点。它通过从摄像机向鼠标位置发射射线来进行碰撞检测。
以下是该节点的完整使用案例和具体操作步骤。
节点概述
此节点属于Player Controller,主要有两个版本:
-
Get Hit Result Under Cursor by Channel:根据指定的碰撞通道(Trace Channel) 进行检测。 -
Get Hit Result Under Cursor for Objects:根据指定的对象类型(Object Type) 列表进行检测。
两者核心功能一致,常用的是前者。
核心参数与输出
-
Trace Channel (碰撞通道):选择用于检测的通道,常用
Visibility或Camera。目标物体必须阻塞(Block) 此通道才能被检测到。 -
Trace Complex (复杂追踪):
-
True:使用网格的三角面进行精确检测,性能开销较大。 -
False:使用物体的简化碰撞体,性能更好。
-
-
Return Value (布尔值):
True表示检测到物体,False表示未命中。 -
Hit Result (命中结果结构体):包含丰富的命中信息。
-
Hit Actor:被击中的 Actor。
-
Hit Component:被击中的具体组件。
-
Location:命中点的世界坐标。
-
以及其他如撞击法线、骨骼名称等信息。
-
完整操作步骤 (蓝图实现)
第一步:项目设置与准备
-
显示鼠标光标:打开关卡蓝图(Level Blueprint) 或在游戏模式(Game Mode) 中,使用
Show Mouse Cursor节点,确保其值为True。Event BeginPlay -> Get Player Controller -> Show Mouse Cursor (True)
-
确保输入(Input)可用:在项目设置(Project Settings) -> 引擎(Engine) -> 输入(Input) 中,绑定鼠标按键(如左键)事件。通常在关卡蓝图或玩家控制器蓝图中处理。
第二步:构建核心交互逻辑 (点击并打印信息)
这是最基础的应用,在鼠标点击时检测并打印命中物体的信息。
-
在关卡蓝图或玩家控制器蓝图的事件图表中,添加
InputAction或InputKey事件(例如,Left Mouse Button)。 -
从该事件节点拖出连线,添加
Get Player Controller节点(目标为Player Controller 0)。 -
从
Get Player Controller节点拖出连线,搜索并添加Get Hit Result Under Cursor by Channel节点。 -
配置该节点的参数:
-
Trace Channel:选择
Visibility。 -
Trace Complex:根据需要选择
False(性能优先)或True(精确优先)。
-
-
从
Get Hit Result Under Cursor by Channel节点拖出Return Value引脚,添加Branch节点。这是关键步骤,用于确保只有在成功命中物体时才执行后续操作。 -
在
Branch节点的True执行引脚上,从Get Hit Result Under Cursor by Channel节点的Hit Result输出引脚拖出,添加Break Hit Result节点。 -
从
Break Hit Result节点拖出Hit Actor和Location引脚,连接到Print String节点,以在屏幕上显示信息。蓝图逻辑示意:
[Left Mouse Button] -> [Get Player Controller] -> [Get Hit Result Under Cursor by Channel] | v (Return Value) [Branch] --False--> (不做任何事) | v (True) [Break Hit Result] | +-------------+-------------+ | | v (Hit Actor) v (Location) [Print String] [Print String]
第三步:实现高级应用 (物体跟随鼠标移动)
这是一个更动态的例子,让一个物体(如小球)跟随鼠标在3D空间中的位置移动。
-
在场景中放置一个你想控制的 Actor(例如,一个球体)。
-
在关卡蓝图中,创建一个自定义事件,命名为
UpdateObjectLocation。 -
在这个事件中,重复第二步的步骤 2-5 来获取鼠标的命中位置。
-
在
Branch节点的True执行引脚上,添加Set Actor Location节点。 -
将
Set Actor Location节点的Target设置为你的球体。 -
将其
New Location引脚连接到Break Hit Result节点的Location引脚。 -
在关卡蓝图的
Event Tick节点上,调用你创建的UpdateObjectLocation事件。-
注意:在
Event Tick中执行射线检测可能会有性能开销,但对于简单的演示是可行的。
-
常见问题与技巧 (FAQ)
-
节点一直返回
False,检测不到任何物体?-
检查碰撞设置:确保目标物体的碰撞预设(Collision Preset)阻塞(Block) 了你选择的
Trace Channel(如Visibility)。 -
检查物体可见性:确保物体的
Visible和Hidden in Game属性为True。如果物体在游戏中不可见,可能无法被检测到。 -
检查鼠标光标:确认
Show Mouse Cursor已启用。
-
-
如何区分点击到的是UI还是3D世界物体?
-
如果点击到UI(UMG),
Get Hit Result Under Cursor通常不会返回有效的3D命中结果。你可以先检测UI的命中情况,再决定是否进行3D射线检测。
-
-
Get Hit Result Under Cursor by Channel和Line Trace by Channel有什么区别?-
Get Hit Result Under Cursor是便捷节点,它封装了“将屏幕坐标转换为世界射线并执行检测”的完整流程。而Line Trace by Channel需要你手动提供射线的起点和终点。
-
-
如何让物体只在鼠标悬停时高亮?
-
可以使用
OnBeginCursorOver和OnEndCursorOver事件,它们专门用于处理鼠标悬停逻辑。需要在 Player Controller 中启用Enable Mouse Over Events。
-
扩展应用
掌握此节点后,可以实现多种交互:
-
点击选中物体:在RTS或点击式冒险游戏中。
-
鼠标悬停显示信息:如Tooltip。
-
点击地面控制角色移动:在俯视角或MOBA游戏中。
-
3D空间中的拖拽:结合点击和移动事件。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容